网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

WDM驱动程序开发之应用程序测试篇CreateFile,ReadFile,WriteFile,DeviceIoControl,CloseHandle.

http://www.diybl.com/ 2008-3-24  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】

 一、*****CreateFile*****
    这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:
控制台对象、通信资源对象、目录对象(只能打开)、磁盘设备对象、文件对象、邮槽对象、管道对象。
    函数原型:
HANDLE CreateFile(
  LPCTSTR lpFileName,                         // file name对象路径名
  DWORD dwDesiredAccess,                      // access mode控制模式
  DWORD dwShareMode,                          // share mode共享模式
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD 安全属性(也即销毁方式)
  DWORD dwCreationDisposition,                // how to create
  DWORD dwFlagsAndAttributes,                 // file attributes
  HANDLE hTemplateFile                        // handle to template file
);
【Parameters】
1、lpFileName
    一个指向无终结符的字符串的指针,来指明要创建或打开的对象的名字。
    在Windows NT/2000/XP平台上:如果用ANSI版本的函数,字符串长度应限制在MAX_PATH;如果用Unicode版本的函数,这个限制可以扩充到32000个Unicode字符。
    在Windows95/98/Me平台上:只能用ANSI版本的函数,字符串长度限制在MAX_PATH。
2、dwDesiredAccess
    指明对象的控制模式。一个应用程序可以包含读控制、写控制、读/写控制、设备查询控制。
这个参数的取值可以是下面这些的组合:
    0                                             指定设备查询控制:程序可以不访问设备就查询到设备属性。
    GENERIC_READ                指定读控制,可以从对象中读取数据(指针将可以移动)。
    GENERIC_WRITE               指定写控制,可以向对象中写数据(指针将可以移动)。
    ----------------------------------------------------------------------
    另外,还可以指定下面的控制标志:
标准控制权限(16-23位掩码):
    DELETE                     删除对象的权限。
    READ_CONTROL   从对象的安全描述符中读取信息的权限,但不包括SACL(系统访问控制列表)中的信息。
    WRITE_DAC             修改对象安全描述符中的DACL(随机访问控制列表)的权限
    WRITE_OWNER     修改对象安全描述符中的属主的权限
    SYNCHRONIZE    同步化使用对象的权限,即可以创建一个线程等待信号量释放(但有些对象不支持这个权限)。
    STANDARD_RIGHTS_REQUIRED    等价于前面四种权限的总合(通常这四种是必须具有的权限)。
    STANDARD_RIGHTS_READ        一般等价于READ_CONTROL
    STANDARD_RIGHTS_WRITE       一般等价于READ_CONTROL
    STANDARD_RIGHTS_EXECUTE     一般等价于READ_CONTROL
    STANDARD_RIGHTS_ALL         等价于前面五种权限的总合。
特殊控制权限(0-15位掩码):
    SPECIFIC_RIGHTS_ALL
    ACCESS_SYSTEM_SECURITY
    MAXIMUM_ALLOWED
    GENERIC_READ
    GENERIC_WRITE
    GENERIC_EXECUTE
    GENERIC_ALL
注:实质上是通过ACCESS_MASK结构体的一个双字值来设置标准权限、特殊权限和一般权限的。
3、dwShareMode
    指定对象的共享模式。如果dwShareMode==0,表示是互斥使用的。如果CreateFile打开成功,则别的程序只能等到当前程序关闭对象句柄CloseHandle后才能在打开或使用。
    使用下面这些值的组合来表示对象的共享模式:
    FILE_SHARE_DELETE      Windows NT/2000/XP:打开操作只有在删除请求发生时才能返回成功。
    FILE_SHARE_READ                打开操作只有在读控制请求发生时才能返回成功。
    FILE_SHARE_WRITE               打开操作只有在写控制请求发生时才能返回成功。
4、lpSecurityAttributes
    一个指向SECURITY_ATTRIBUTES结构对象的指针,决定返回的句柄是否被子进程所继承。如果lpSecurityAttributes参数为NULL,句柄就不能被子进程继承。
    在Windows NT/2000/XP平台下:lpSecurityDescriptor这个成员指明了这个对象的安全描述符。如果lpSecurityAttributes参数为NULL,对象将获得一个默认的安全描述符。目标文件系统必须为这个参数的在文件上的有效操作保证安全性。
typedef struct _SECURITY_ATTRIBUTES {
  DWORD  nLength;  //结构体的大小(字节为单位),即siziof(SECURITY_ATTRIBUTES)
  LPVOID lpSecurityDescriptor; //指向对象的安全描述符的指针,控制对象的共享属性。在Windows 95/98/Me平台                                                     //上这个成员被忽略。
  BOOL   bInheritHandle; //指明当一个新的子进程创建时,是否继承当前返回的句柄
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;
5、dwCreationDisposition
    指明当打开的对象存在或不存在的时候各需怎样处理。这个参数必须是一下值的其中之一:
    CREATE_NEW            创建新文件/对象(当对象已经存在是将返回失败)。
    CREATE_ALWAYS         总是创建(如果对象存在就覆盖它,清除当前属性,把文件属性和dwFlagsAndAttributes指定的标志相结合)。
    OPEN_EXISTING         打开文件(如果不存在就返回失败)。

欢迎光临DIY部落,点击这里查看更多文章教程   【点击打包该文章】
如果图片或页面不能正常显示请点击这里 站内搜索:   

文章评论

请您留言