wdk提供了兩種比較常用的字串的封裝:
char 對應指標pchar
wchar 對應指標pwchar
其列印方式如下:
char pstr[100] = "hello, world!";
wchar pwstr[100] = l"hello, world!";
kdprint(("char ascii: %s\n", pstr)); // %s
kdprint(("wchar unicode: %s\n", pwstr)); // %s
區別在於char是ansi而wchar是unicode, 列印時乙個是%s另乙個是%s
wdk也提供了兩種不一樣的字串儲存方式:
1. ansi_string
typedef struct _string string, *pansi_string;
typedef string ansi_string;
2. unicode_string
typedef struct _unicode_string unicode_string ,*punicode_string;
他們之間唯一的區別就是乙個是字元,乙個是寬字元。他們都不像c風格字串以0做結尾而是用length來限定長度
length是位元組數,也就是說對於unicode_string來講,length就等於字元數的兩倍。
列印時的格式化是%z和%wz來表示
初始化, 賦值的方式:
rtlinitunicodestring, rtlinitansistring(這兩種申請的不用釋放記憶體)
rtl_constant_string(...)巨集(中能用於初始化時)
自己通過exallocatepool申請記憶體並填寫入結構中自己負責清理
**方式
rtlfreeansistring, rtlfreeunicodestring(內部呼叫exfreepool)
如果是自己申請的記憶體可以直接呼叫exfreepool釋放
#include void unload(in pdriver_object pdriverobject)
void stringtest1()
void stringtest()
ntstatus driverentry(in pdriver_object pdriverobject, punicode_string pregistrypath)
#include void stringtest2()
ntstatus driverentry(in pdriver_object pdriverobject, punicode_string pregistrypath)
#include void stringtest3()
ntstatus driverentry(in pdriver_object pdriverobject, punicode_string pregistrypath)
注意: wdk雖然提供了轉成大寫的api但沒有提供轉成小寫的
#include void stringtest4()
ntstatus driverentry(in pdriver_object pdriverobject, punicode_string pregistrypath)
void stringtest5() ;
rtlunicodestringtoansistring(&s3, &u1, true);
kdprint(("%z\n", &s3));
unicode_string u3;
rtlansistringtounicodestring(&u3, &s1, true);
kdprint(("%wz\n", &u3));
u2.buffer = (pwstr)exallocatepool(pagedpool, 1024);
u2.maximumlength = 1024 * 2;
u2.length = 0;
rtlansistringtounicodestring(&u2, &s1, false);
kdprint(("%wz\n", &u2));
rtlfreeunicodestring(&u2);
rtlfreeansistring(&s1);
}ntstatus driverentry(in pdriver_object pdriverobject, punicode_string pregistrypath)
(完) 加密與解密學習筆記4 Windows訊息機制
windows是乙個訊息 message 驅動式系統,windows訊息提 用程式與應用程式之間 應用程式與windows系統間進行通訊的手段。應用程式實現的功能由訊息來觸發,並且靠對訊息的響應和處理來完成。windows系統有2種訊息佇列 1 系統訊息佇列 2 應用程式訊息佇列 計算機說有輸入裝置...
Windows 核心驅動簽名策略
windows的驅動簽名策略起始於win7 64位作業系統,從win7 64位一直到 win10 1511版本,驅動程式必須要有sha1簽名,且證書必須使用微軟簽發的證書交叉簽名。後來微軟推行了sha2簽名,從win10 1607到win10 1709,sha1和sha2簽名都被認可。從win10 ...
Windows核心程式設計(二)核心驅動執行,除錯
由於windows數字簽名的原因,沒有簽名或者使用測試簽名的都不能放到64位系統上執行。兩個解決辦法。一 將系統設定為除錯模式 二 關閉系統的驅動簽名校驗。服務管理器 管理系統上的所有服務,建立 註冊 修改 啟動服務。所以我們編寫程式的時候,首先要開啟服務管理器。其api為 sc handle wi...