none
UWP nul device RRS feed

  • Вопрос

  • День добрый. Подскажите, пожалуйста, как получить доступ к NUL девайсу в части C++ проекта на UWP.

    Раньше для этого можно было использовать такой код:

    HANDLE h = CreateFile("NUL", 0, 0, NULL, OPEN_ALWAYS, 0, NULL);

    Но теперь CreateFile и CreateFile2 вызывают ошибку ERROR_ACCESS_DENIED. Возможно, что-то нужно добавить в манифест файл? У меня кончились идеи, если честно.

    14 июня 2017 г. 18:57

Ответы

  • В UWP доступен CreateFile2, но он ограничен: 

    When called from a Windows Store app, CreateFile2 is simplified. You can open only files or directories inside the ApplicationData.LocalFolder orPackage.InstalledLocation directories. You can't open named pipes or mailslots or create encrypted files (FILE_ATTRIBUTE_ENCRYPTED).

    Скорее всего то же самое происходит и с CreateFile (скорее всего вызывает CreateFile2). Отсюда и ошибка доступа.

    Попробуйте CreateFile2, но используйте полный путь, например к ApplicationData.LocalFolder, а потом добавьте nul.

    А, это долгая история. В общем укрепление безопасности, чтоб приложения жили себе в песочницах и не открывали какие попало файлы. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    14 июня 2017 г. 22:07
    Модератор
  • "Там происходят сомнительные манипуляции с запросами хэндлеров на нулл и на файлы для превращение их через поля pioinfo в непонятное нечто"

    Вероятно, смысл в том, чтобы получить дескриптор любого файла, а затем использовать его для своих целей, редактируя поля внутренних структур CRT. NUL-устройство используется лишь потому, что это файл, который (в обычных Windows-приложениях) всегда существует и открывается. В UWP, видимо, такая роскошь не доступна, и придется для этих целей создать специальный бессмысленный файл и поддерживать его существование.

    15 июня 2017 г. 5:21

Все ответы

  • Этот API (как и многие другие Win32 API) не доступен в UWP.

    Чтоб найти замену поясните для чего вам понадобилось вызывать CreateFile вообще и для NUL устройства в частности. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    14 июня 2017 г. 20:01
    Модератор
  • Пытаюсь адаптировать Ruby машину на UWP а именно win32.c . Там происходят сомнительные манипуляции с запросами хэндлеров на нулл и на файлы для превращение их через поля pioinfo в непонятное нечто.

    И по скольку в этой каше разобраться довольно сложно (я никак не связан с разработчиками руби) - проще приделать костыли к уже имеющемуся функционалу. Для меня во многом загадка столь непонятного усложнения, но оно есть и мне придётся с ним что-то делать.

    14 июня 2017 г. 20:18
  • Увы, вам придется разбиратся как и что работает и заменять это UWP эквивалентами или убирать если их нет.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    14 июня 2017 г. 20:39
    Модератор
  • А помимо CreateFile нет никаких способов запросить хэндлер на нул? Мне казалось, что это весьма не сложный функционал, который зачем-то был удалён...

    Не скажете, по каким причинам были введены такие ограничения?

    14 июня 2017 г. 21:19
  • В UWP доступен CreateFile2, но он ограничен: 

    When called from a Windows Store app, CreateFile2 is simplified. You can open only files or directories inside the ApplicationData.LocalFolder orPackage.InstalledLocation directories. You can't open named pipes or mailslots or create encrypted files (FILE_ATTRIBUTE_ENCRYPTED).

    Скорее всего то же самое происходит и с CreateFile (скорее всего вызывает CreateFile2). Отсюда и ошибка доступа.

    Попробуйте CreateFile2, но используйте полный путь, например к ApplicationData.LocalFolder, а потом добавьте nul.

    А, это долгая история. В общем укрепление безопасности, чтоб приложения жили себе в песочницах и не открывали какие попало файлы. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    14 июня 2017 г. 22:07
    Модератор
  • "Там происходят сомнительные манипуляции с запросами хэндлеров на нулл и на файлы для превращение их через поля pioinfo в непонятное нечто"

    Вероятно, смысл в том, чтобы получить дескриптор любого файла, а затем использовать его для своих целей, редактируя поля внутренних структур CRT. NUL-устройство используется лишь потому, что это файл, который (в обычных Windows-приложениях) всегда существует и открывается. В UWP, видимо, такая роскошь не доступна, и придется для этих целей создать специальный бессмысленный файл и поддерживать его существование.

    15 июня 2017 г. 5:21