16boke - 一路博客

CreateFile第一个参数设备名称

首次利用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

ip_image002.jpeg

相关介绍:在表示文件路径的表示上

windows 系统用: \ (比如 c:\windows\system32\win.exe)

Linux 和 Unix 系统用:  / (比如:/home/user )

在网页上用:  / (比如:http://www.16boke.com/article/detail/159)

C++  网络