驅動開發:通過Async反向與內核通信( 三 )

驅動層說完了,接下來是應用層,對于應用層來說,需要使用CreateEvent打開通知事件,或者叫做事件對象,然后當有通知時,則直接使用ReadFile讀取對應的緩沖區,當所有讀取全部結束WaitForMultipleObjects等待結束即輸出結果 。
#include <stdio.h>#include <Windows.h>int main(int argc, char *argv[]){ HANDLE hFile; char Buffer[3][32] = { 0 }; DWORD dwRet[3] = { 0 }; OVERLAPPED ol[3] = { 0 }; HANDLE hEvent[3] = { 0 }; // By:LyShark hFile = CreateFileA("\\\\.\\LySharkAsync", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,NULL); if (INVALID_HANDLE_VALUE == hFile)return  0; // event用來通知請求完成 hEvent[0] = CreateEvent(NULL, TRUE, FALSE, NULL); ol[0].hEvent = hEvent[0]; hEvent[1] = CreateEvent(NULL, TRUE, FALSE, NULL); ol[1].hEvent = hEvent[1]; hEvent[2] = CreateEvent(NULL, TRUE, FALSE, NULL); ol[2].hEvent = hEvent[2]; // 讀取事件內容到緩存 ReadFile(hFile, Buffer[0], 13, &dwRet[0], &ol[0]); ReadFile(hFile, Buffer[1], 13, &dwRet[1], &ol[1]); ReadFile(hFile, Buffer[2], 13, &dwRet[2], &ol[2]); // 等待三個事件執行完畢 WaitForMultipleObjects(3, hEvent, TRUE, INFINITE); // 輸出結果 printf("緩存LyShark A: %s \n", Buffer[0]); printf("緩存LyShark B: %s \n", Buffer[1]); printf("緩存LyShark C: %s \n", Buffer[2]); CloseHandle(hFile); return  0;}這段代碼最終運行效果如下:

驅動開發:通過Async反向與內核通信

文章插圖

推薦閱讀