首次利用API函数CreateFile获得设备句柄时,应该会对第一个参数lpFileName的值比较困惑。
HANDLE CreateFile(
LPCTSTR lpFileName, // 文件名/设备路径 设备的名称
DWORD dwDesiredAccess, // 访问方式
DWORD dwShareMode, // 共享方式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全描述符指针
DWORD dwCreationDisposition, // 创建方式
DWORD dwFlagsAndAttributes, // 文件属性及标志
HANDLE hTemplateFile // 模板文件的句柄
);
在Windows 2000中,设备的名称有两个用途。
第一个用途,设备命名后,其它内核模式部件可以通过调用IoGetDeviceObjectPointer函数找到该设备,找到设备对象后,就可以向该设备的驱动程序发送IRP。
另一个用途,允许应用程序打开命名设备的句柄,这样它们就可以向驱动程序发送IRP。应用程序可以使用标准的CreateFile API打开命名设备句柄,然后用ReadFile、WriteFile,和DeviceIoControl向驱动程序发出请求。
通常设备对象的名字放到\Device目录中,以"\Device\[设备名]”形式命名的。例如磁盘分区的C盘的设备名称就是"\Device\HarddiskVolume1”。
应用程序打开设备句柄时使用\\.\路径前缀而不是标准的UNC(统一命名约定)名称。因此程序中形式固定为“\\.\DeviceName”(程序中注意添加转义字符),DeviceName必须与设备驱动程序内定义的设备名称一致。例如:设备名称\Device\NEO_NEOADAPTER_VPN1_DEVICE,在程序中传参是L"\\\\.\\NEO_NEOADAPTER_VPN1_DEVICE"。
WinObj可以用来查看设备名称。
WinObj下载地址:http://pan.baidu.com/s/1qXG5ObM
相关介绍:在表示文件路径的表示上
windows 系统用: \ (比如 c:\windows\system32\win.exe)
Linux 和 Unix 系统用: / (比如:/home/user )
在网页上用: / (比如:http://www.16boke.com/article/detail/159)