I am working on a simple device driver I want to comunicate with the driver from user-mode using IRP.
I am having trouble opening the device driver. Using DeviceTree I am able to see the device name eg \Device\MyDevice.
But when I try to open it like this :
hand := CreateFile('\Device\MyDevice', GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
I always get INVALID_HANDLE_VALUE
and GetLastError is (The System cannot find the path specified)
What I am doing wrong ? I know the driver works because I can see it running and printing stuff in DebugView. So any tips ?
Here is a good explanation by Tim Robinson, MVP (Windows SDK):
Names of the form
\Device\xxx
are internal NT object manager names which are inaccessible to Win32. You will only be able to access your device if it creates a symbolic link to\Device\MyDevice
from the\??\
directory. Objects in the\??\
kernel directory show up through\\.\
in Win32. Use Winobj in the DDK (or download it from www.sysinternals.com) to check.
NOTE: Nowadays NT namespace root is exposed via GLOBALROOT
symbolic link, so any NT path is accessible to Win32 including \Device\xxx
: use \\.\GLOBALROOT\Device\xxx
. A device symlink is not required in such case.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With