日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于后面的內容跟Visual Studio已經沒有太大關系,故文章標題去掉Visual Studio前綴。

今天剛好在CSDN上讀到一篇文章《程序員都要有八塊腹肌》,所以要練好身體啊!其實我也想說,現代程序員要練好太極,才能以柔克剛,以一當十。

本文以獲取文件寫的內容為例,來探討怎樣獲取寫入的數據。

請先參考這個關于如何獲取數據buffer的文章

http://msdn.microsoft.com/en-us/library/windows/hardware/ff554436(v=vs.85).aspx

請看下面的源代碼獲取數據的兩種方式。

PFLT_FILE_NAME_INFORMATION file_name_info = NULL;
?status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &file_name_info);
?if (NT_SUCCESS(status))
?{
??WCHAR *ssmfflag = L".ssmffile";
??SIZE_T len = sizeof(WCHAR) * wcslen(ssmfflag);
??if (file_name_info->Name.Length > wcslen(ssmfflag) &&
???RtlCompareMemory((char*)ssmfflag, (char *)((char *)file_name_info->Name.Buffer + file_name_info->Name.Length - len), len) == len)
??{

???PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("The file name is %wZ,the offset is %u,len is %u", file_name_info->Name, iopb->Parameters.Write.ByteOffset, writeLen));
???

if (iopb->Parameters.Write.MdlAddress == NULL)
???{
????try
????{
?????RtlCopyMemory(buffer,
??????iopb->Parameters.Write.WriteBuffer,
??????min(writeLen, 90));

????}
????except(EXCEPTION_EXECUTE_HANDLER)
????{
?????PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, (""Exception occurred.\n"));
????}

???}
???else
???{//這個是針對direct io的。
????PUCHAR buff = MmGetSystemAddressForMdlSafe(iopb->Parameters.Write.MdlAddress,
?????NormalPagePriority);
????PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("MDL"));
????if (buff)
????{
?????RtlCopyMemory(buffer,
??????buff,
??????min(writeLen, 90));
?????
????}

???}
???PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("The data is %s", buffer));
???
??}
??FltReleaseFileNameInformation(file_name_info);
?}
?return FLT_PREOP_SUCCESS_WITH_CALLBACK;


上面的這段代碼就是獲取寫入的數據并把前100個數據內容打印出來。



總結

以上是生活随笔為你收集整理的Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。