Win驅動4 Windows核心態字串操作

2021-10-24 14:30:02 字數 2411 閱讀 8892

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...