Сначала приходит то, на что указывал Крис
"\\.\hook" -> "\\\\.\\hook"
Таким образом, третий вариант, который вы дали, должен был сработать."\\Device\\hook"
определенно не будет работать с Win32 API.Они ограничены тем, что находится под \\DosDevices
или \\??
и его вариациями (пространства имен для каждой сессии).\\DosDevices
и \\??
обычно являются одним и тем же местоположением, причем одно из них является символической ссылкой на другую, в зависимости от конкретной версии ОС.
Существует несколько возможных причин, по которым это не удается.Одним из них является пространство имен, и вы ошибаетесь.Внутренне путь \\.\
(я здесь исключил синтаксическое экранирование обратной косой черты) преобразуется в \??\
, что делается на границе между Win32 и собственным API.Последний путь (\??\...
) - это то, что понимают нативный API и сама ОС.Любая другая причина потребует, чтобы вы опубликовали фактический код, который вы пытаетесь запустить (в частности, вызов CreateFile
).Таким образом, потребуется больше информации.Одним из вопросов будет то, случайно ли вы передали широкую строку в функцию ANSI и, таким образом, в итоге будете искать путь, который не существует.И есть множество других возможностей, все из которых было бы легко исключить, когда вы публикуете свой код.
\\DosDevices\...
также является собственным путем к объекту.Не используйте его из Win32 API.См. DefineDosDevice
/ QueryDosDevice
для ознакомления с механизмами внизу.
Для экспериментов я рекомендую WinObj от Sysinternals и для прочтения серии книг Windows Internals или любой книги.на Windows драйверы должны иметь разбивку по темам.