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结构指针。