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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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);//注意是%Z

UNICODE_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字符串

VOID

RtlInitAnsiString(

IN OUT PANSI_STRING DestinationString,//要初始化的ANSI_STRING字符串

IN PCSZ SourceString//字符串的内容

);

初始化UNICODE_STRING字符串

VOID

RtlInitUnicodeString(

IN OUT PUNICODE_STRING DestinationString,//要初始化的UNICODE_STRING字符串IN PCWSTR SourceString//字符串的内容

);

///////////////////////////////////////////////////////////////////////////////

字符串复制

ANSI_STRING字符串复制

VOID

RtlCopyString(

IN OUT PSTRING DestinationString,//目的字符串。

IN PSTRING SourceString OPTIONAL//源字符串。

);

UNICODE_STRING字符串复制

VOID

RtlCopyUnicodeString(

IN OUT PUNICODE_STRING DestinationString,//目的字符串。

IN PUNICODE_STRING SourceString//源字符串。

);

///////////////////////////////////////////////////////////////////////////////

字符串比较

ANSI_STRING字符串

LONG

RtlCompareString(

IN PSTRING String1,//要比较的第一个字符串。

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

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

);

UNICODE_STRING字符串

LONG

RtlCompareUnicodeString(

IN PUNICODE_STRING String1,//要比较的第一个字符串。

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

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

);

///////////////////////////////////////////////////////////////////////////////

字符串转化成大写

ANSI_STRING字符串转化成大写

VOID

RtlUpperString(

IN OUT PSTRING DestinationString,//目的字符串。

IN PSTRING SourceString//源字符串。

);

UNICODE_STRING字符串转化成大写

NTSTA TUS

RtlUpcaseUnicodeString(

IN OUT PUNICODE_STRING DestinationString OPTIONAL,//目的字符串。

IN PCUNICODE_STRING SourceString,//源字符串。

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

);

///////////////////////////////////////////////////////////////////////////////

字符串与整型数字相互转换

UNICODE_STRING字符串转化成整数

NTSTA TUS

RtlUnicodeStringToInteger(

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

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

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

);

将整数转化成UNICODE_STRING字符串

NTSTA TUS

RtlIntegerToUnicodeString(

IN ULONG Value,//需要转换的数字。

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

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

);

///////////////////////////////////////////////////////////////////////////////

内核模式下的文件操作

文件创建

NTSTA TUS

ZwCreateFile(

OUT PHANDLE FileHandle,//返回打开文件的句柄

IN ACCESS_MASK DesiredAccess,//对打开文件操作的描述,读,写或者其他。一般指定GENERIC_READ或者GENERIC_WRITE。

IN POBJECT_ATTRIBUTES ObjectAttributes,//是OBJECT_ATTRIBUTES结构地址,该结构

相关文档
最新文档