Windows驱动开发技术详解 第六章的(Windows内核函数)自我理解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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结构地址,该结构