下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 内核编程笔记(一、内核字符串处理)(Kernel programming not…

内核编程笔记(一、内核字符串处理)(Kernel programming notes (a, kernel string processing)).doc

内核编程笔记(一、内核字符串处理)(Kerne…

Georgia兰兰
2018-11-07 0人阅读 举报 0 0 暂无简介

简介:本文档为《内核编程笔记(一、内核字符串处理)(Kernel programming notes (a, kernel string processing))doc》,可适用于社会民生领域

内核编程笔记(一、内核字符串处理)(Kernelprogrammingnotes(a,kernelstringprocessing))内核编程笔记(一、内核字符串处理)(Kernelprogrammingnotes(a,kernelstringprocessing))Stringstructure=================================================================UNICODESTRINGTheUNICODESTRINGstructureisusedtodefinetheUNICODEstringTypedef,struct,UNICODESTRING{USHORTLengthUSHORTMaximumLengthPWSTRBuffer}UNICODESTRING*PUNICODESTRINGStructvariabledescription:LengthThelengthofastringstoredinabufferMaximumLengthMaximumlengthofbufferBufferPointtoabuffercontainingawidestringofcharacters=================================================================BecauseBufferinUNICODESTRINGdoesnotnecessarilyendwithterminatorsSothefollowingmethodsareallwrong:UNICODESTRINGstrLen=wcslen(strBuffer)trytofindthelengthDbgPrint(ws,strBuffer)trytodebugoutputthecontentsofthestrBufferThereasonfortheerrorissimplebothwcslenandDbgPrintconsider''tobeastringTerminator=================================================================,stringinitializationWronginitializationmethod:UNICODESTRINGstrWcscpy(strBufferLmyfirststring!")error:BufferisanuninitializedpointerStrLength=strMaximumLength=wcslen(L,my,first,string,)*sizeof(WCHAR)Thecorrectinitializationmethodis:UNICODESTRINGstrStrBuffer=L"myfirststring"!"StrLength=strMaximumLength=wcslen(L,my,first,string,)*sizeof(WCHAR)Themethodofinitializingthestringaboveisrelativelytedious,andthereisamacrointheheaderfilentdefhthatinitializesthesubstringeasily#include<ntdefh>UNICODESTRINGSTR=RTLCONSTANTSTRING(L,my,first,string,)ButtheRTLCONSTANTSTRINGmacrocanonlybeusedwhendefining,andinordertoinitializethestringatanytime,weusetheRtlInitUnicodeStringdefinitionmethodasfollows:UNICODESTRINGstrRtlInitUnicodeString(str,L,my,first,string,)OruseRtlInitEmptyString:UNICODESTRINGstrWCHARwchStrRtlInitEmptyString(str,wchStr,sizeof(WCHAR)*),stringcopyInkernelprogramming,thenormalwcscpyfunctionisnolongeravailableWeusetheRtlCopyUnicodeStringfunctiontocopyWhenyoucopy,becarefulthattheBufferofthedestinationstringmusthaveenoughspace,otherwisethedatawillbelost,butthesystemwon'tcrashExample:UNICODESTRINGdstWCHARdstbufUNICODESTRINGSRC=RTLCONSTANTSTRING(L,my,first,string,)RtlInitEmptyString(dst,dstbuf,sizeof(WCHAR)*)RtlCopyUnicodeString(dst,src),stringconnectionTheUnicodestringconnectioninthekernelisnotdifficult,anditisimportanttoensurethespacesizeofthetargetstringExample:NTSTATUSstatusUNICODESTRINGdstWCHARdstbufUNICODESTRINGSRC=RTLCONSTANTSTRING(L,my,first,string,)RtlInitEmptyString(dst,dstbuf,sizeof(WCHAR)*)RtlCopyUnicodeString(dst,src)Status=RtlAppendUnicodeToString(dst,L,my,second,string,)如果(状态==statussuccess){}这里在介绍个连接字符串的函数:NTSTATUSRtlAppendUnicodeStringToString(在punicodestring目的地指向目的字符串的缓冲区在punicodestring源指向源字符串的缓冲区)NTSTATUS是一个返回值类型如果成功就返回statussuccess否则返回一个错误码。如果目标字符串的空间不足则返回一个statusbuffertoosamll。、字符串的打印NTSTATUSRtlStringCbPrintfW(从pszdestLPWSTR指向目的Unicode字符串在sizetcbdest目的缓冲区的大小Unicode的*sizeof(wchar)。在lpcwstrpszformat„)使用该函数的时候要包含ntstrsate。H和ntstrsatelib。实例:intconstarraysize=wcharpszdestarraysizesizetcbdest=arraysize*sizeof(wchar)lpcwstrpszformat=L“WZddd”wchar*psztxt=“我的第一个字符串~”NTSTATUS状态=rtlstringcbprintfw(pszdestcddestpszformatpsztxt,,)rtlstringcbprintfw在目标缓冲区内存不足的时候依然可以打印但是多余的部分被借去了此时的状态的返回值为statusbuffrtoverflow。打印unicodestring类型的指针时在不确定字符串是以空终止符结尾的情况下最好用WZ否则也可以使用ws和s。驱动中还可以调用dbgprint()函数来打印调试信息。但是dbgprint()不管在发行版还是调试版本中都会有效一般我们都使用宏kdprint()来输出调试字符串。使用kdprint()函数的时候要使用双括号来包含参数。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/6

内核编程笔记&#40;一、内核字符串处理&#41;(Kernel programming notes &#40;a, kernel string processing&#41;)

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利