当前位置:文档之家› Windows驱动开发技术详解 第六章的(Windows内核函数)自我理解

Windows驱动开发技术详解 第六章的(Windows内核函数)自我理解

Windows驱动开发技术详解第六章的(Windows内核函数)自我理解学习各种高级外挂制作技术,马上去百度搜索(魔鬼作坊),点击第一个站进入,快速成为做挂达人。

其实这章主要就是讲函数DDK有自己的函数跟SDK一样编写DDK使用DDK提供的函数就OK了///////////////////////////////////////////////////////////////////////////////ASCII字符串和宽字符串ASCII字符构造char*str1="abc";打印ASCII字符串char*string="hello";KdPrint("%s\n",string);\\注意是小写%s/////UNICODE字符构造wchar_t*str2=L"abc";打印宽字符串WCHAR*string=L"hello";KdPrint("%S\n",string);\\注意是大写%S///////////////////////////////////////////////////////////////////////////////ANSI_STRING字符串和UNICODE_STRING字符串ASCII字符串进行了封装typedef struct_STRING{USHORT Length;//字符的长度。

USHORT MaximumLength;//整个字符串缓冲区的最大长度。

PCHAR Buffer;//缓冲区的指针。

}STRING;输出字符串ANSI_STRING ansiString;KdPrint("%Z\n",&ansiString);//注意是%ZUNICODE_STRING宽字符串封装typedef struct_UNICODE_STRING{USHORT Length;//字符的长度,单位是字节。

如果是N个字符,那么Length等于N的2倍。

USHORT MaximumLength;//整个字符串缓冲区的最大长度,单位也是字节。

PWSTR Buffer;//缓冲区的指针。

}UNICODE_STRING*PUNICODE_STRING;输出字符串UNICODE_STRING ansiString;KdPrint("%wZ\n",&ansiString);//注意是%wZ///////////////////////////////////////////////////////////////////////////////字符初始化与销毁初始化ANSI_STRING字符串VOIDRtlInitAnsiString(IN OUT PANSI_STRING DestinationString,//要初始化的ANSI_STRING字符串IN PCSZ SourceString//字符串的内容);初始化UNICODE_STRING字符串VOIDRtlInitUnicodeString(IN OUT PUNICODE_STRING DestinationString,//要初始化的UNICODE_STRING字符串IN PCWSTR SourceString//字符串的内容);///////////////////////////////////////////////////////////////////////////////字符串复制ANSI_STRING字符串复制VOIDRtlCopyString(IN OUT PSTRING DestinationString,//目的字符串。

IN PSTRING SourceString OPTIONAL//源字符串。

);UNICODE_STRING字符串复制VOIDRtlCopyUnicodeString(IN OUT PUNICODE_STRING DestinationString,//目的字符串。

IN PUNICODE_STRING SourceString//源字符串。

);///////////////////////////////////////////////////////////////////////////////字符串比较ANSI_STRING字符串LONGRtlCompareString(IN PSTRING String1,//要比较的第一个字符串。

IN PSTRING String2,//要比较的第二个字符串。

BOOLEAN CaseInSensitive//是否对大小写敏感。

);UNICODE_STRING字符串LONGRtlCompareUnicodeString(IN PUNICODE_STRING String1,//要比较的第一个字符串。

IN PUNICODE_STRING String2,//要比较的第二个字符串。

IN BOOLEAN CaseInSensitive//是否对大小写敏感。

);///////////////////////////////////////////////////////////////////////////////字符串转化成大写ANSI_STRING字符串转化成大写VOIDRtlUpperString(IN OUT PSTRING DestinationString,//目的字符串。

IN PSTRING SourceString//源字符串。

);UNICODE_STRING字符串转化成大写NTSTA TUSRtlUpcaseUnicodeString(IN OUT PUNICODE_STRING DestinationString OPTIONAL,//目的字符串。

IN PCUNICODE_STRING SourceString,//源字符串。

IN BOOLEAN AllocateDestinationString//是否为目的字符串分配内存。

);///////////////////////////////////////////////////////////////////////////////字符串与整型数字相互转换UNICODE_STRING字符串转化成整数NTSTA TUSRtlUnicodeStringToInteger(IN PUNICODE_STRING String,//需要转换的字符串。

IN ULONG Base OPTIONAL,//转换的数的进制(如2,8,10,16)。

OUT PULONG Value//需要转换的数字。

);将整数转化成UNICODE_STRING字符串NTSTA TUSRtlIntegerToUnicodeString(IN ULONG Value,//需要转换的数字。

IN ULONG Base OPTIONAL,//转换的数的进制(如2,8,10,16)。

IN OUT PUNICODE_STRING String//需要转换的字符串。

);///////////////////////////////////////////////////////////////////////////////内核模式下的文件操作文件创建NTSTA TUSZwCreateFile(OUT PHANDLE FileHandle,//返回打开文件的句柄IN ACCESS_MASK DesiredAccess,//对打开文件操作的描述,读,写或者其他。

一般指定GENERIC_READ或者GENERIC_WRITE。

IN POBJECT_ATTRIBUTES ObjectAttributes,//是OBJECT_ATTRIBUTES结构地址,该结构包含要打开的文件名。

OUT PIO_STA TUS_BLOCK IoStatusBlock,//指向一个IO_STA TUS_BLOCK结构,该结构接收ZwCreateFile操作的结果状态。

IN PLARGE_INTEGER AllocationSize OPTIONAL,//是一个指针,指向一个64位整数,该数指定文件初始分配时的大小。

该参数仅关系到创建或重写文件操作,如果忽略它(如笔者在这里所做的),那么文件长度将从0开始,并随着写入而增长。

IN ULONG FileAttributes,//0或FILE_ATTRIBUTE_NORML,指定新创建文件的属性。

IN ULONG ShareAccess,//FILE_SHARE_READ或0,指定文件的共享方式。

如果仅为读数据而打开文件,则可以与其他线程同时读取该文件。

如果为写数据而打开文件,可能不希望其他线程访问该文件。

IN ULONG CreateDisposition,//FILE_OPEN或FILE_OVERWRITE_IF,表明当指定文件存在或不存在时应如何处理。

IN ULONG CreateOptions,//FILE_SYNCHRONOUS_IO_NONALERT,指定控制打开操作和句柄使用的附加标志位。

IN PVOID EaBuffer OPTIONAL,//一个指针,指向可选的扩展属性区。

IN ULONG EaLength//扩展属性区的长度。

);DDK提供了对OBJECT_ATTRIBUTES结构初始化的宏InitializeObjectAttributesVOIDInitializeObjectAttributes(OUT POBJECT_ATTRIBUTES InitializedAttributes,//返回的OBJECT_ATTRIBUTES结构IN PUNICODE_STRING ObjectName,//对象名称,用UNICODE_STRING描述,这里设置的是文件名。

IN ULONG Attributes,//一般设为OBJ_CASE_INSENSITIVE,对大小敏感。

IN HANDLE RootDirectory,//一般为NULL空IN PSECURITY_DESCRIPTOR SecurityDescriptor//一般为NULL空);打开文件NTSTA TUSZwOpenFile(OUT PHANDLE FileHandle,//返回打开的文件句柄。

IN ACCESS_MASK DesiredAccess,//打开的权限,一般设为GENERIC_ALL。

IN POBJECT_ATTRIBUTES ObjectAttributes,//ObjectAttributes结构指针。

相关主题