<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                在Windows NT中,80386保護模式的“保護”比Windows 95中更堅固,這個“鍍金的籠子”更加結實,更加難以打破。在Windows 95中,至少應用程序I/O操作是不受限制的,而在Windows NT中,我們的應用程序連這點權限都被剝奪了。在NT中幾乎不太可能進入真正的ring0層。? 在Windows NT中,存在三種Device Driver: ? 1.“Virtual device Driver” (VDD)。通過VDD,16位應用程序,如DOS 和Win16應用程序可以訪問特定的I/O端口(注意,不是直接訪問,而是要通過VDD來實現訪問)。 ? 2.“GDI Driver”,提供顯示和打印所需的GDI函數。 ? 3.“Kernel Mode Driver”,實現對特定硬件的操作,比如說CreateFile, CloseHandle (對于文件對象而言), ReadFile, WriteFile, DeviceIoControl 等操作。“Kernel Mode Driver”還是Windows NT中唯一可以對硬件中斷和DMA進行操作的Driver。SCSI 小端口驅動和 網卡NDIS 驅動都是Kernel Mode Driver的一種特殊形式。 Visual studio11與Windows8帶來格外不同的新體驗 1.啟動Vs11 ![](https://box.kancloud.cn/2016-04-01_56fdf153bac99.png) 2.看見滿目的驅動開發模板 ![](https://box.kancloud.cn/2016-04-01_56fdf151a72a9.png) 3.選擇一個驅動模式,有內核模式與用戶模式兩種的驅動 ![](https://box.kancloud.cn/2016-04-01_56fdf151e0f15.png) ? 4.創建一個驅動程序,KMDF DriverMVP ![](https://box.kancloud.cn/2016-04-01_56fdf152053f8.png) ? 5.我們選擇的是內核模式的驅動程序,下面是創建成功后的界面,分別是驅動程序本身,與驅動安裝包 ![](https://box.kancloud.cn/2016-04-01_56fdf15221ca7.png) 6.按下F5,選擇驅動編譯, ? ![](https://box.kancloud.cn/2016-04-01_56fdf15236a2b.png) 插入下列代碼實現ring0層枚舉注冊表,請見代碼分析 ~~~ #include <ntddk.h> VOID DriverUnload(IN PDRIVER_OBJECT DriverObject) { DbgPrint("Driver Unload"); } //自定義枚舉注冊表鍵值函數 NTSTATUS MyRegEnumSubValue() { UNICODE_STRING RegUnicodeString; HANDLE hRegister; ULONG ulSize; NTSTATUS ntStatus; UNICODE_STRING uniKeyName; PKEY_VALUE_FULL_INFORMATION pvbi; PKEY_FULL_INFORMATION pfi; ULONG i; OBJECT_ATTRIBUTES objectAttributes; //初始化UNICODE_STRING字符串 RtlInitUnicodeString( &RegUnicodeString, L"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN"); //初始化objectAttributes InitializeObjectAttributes(&objectAttributes, &RegUnicodeString, OBJ_CASE_INSENSITIVE,//對大小寫敏感 NULL, NULL ); //打開注冊表 ntStatus = ZwOpenKey( &hRegister, KEY_ALL_ACCESS, &objectAttributes); if (NT_SUCCESS(ntStatus)) { KdPrint(("Open register successfully\n")); } ZwQueryKey(hRegister, KeyFullInformation, NULL, 0, &ulSize); pfi=(PKEY_FULL_INFORMATION) ExAllocatePool(PagedPool,ulSize); //查詢注冊表 ZwQueryKey(hRegister, KeyFullInformation, pfi, ulSize, &ulSize); //開始循環枚舉注冊表 for(i=0;i<pfi->Values;i++) { ZwEnumerateValueKey(hRegister, i, KeyValueFullInformation, NULL, 0, &ulSize); pvbi =(PKEY_VALUE_FULL_INFORMATION ) ExAllocatePool(PagedPool,ulSize); ZwEnumerateValueKey(hRegister, i, KeyValueFullInformation, pvbi, ulSize, &ulSize); uniKeyName.Length = uniKeyName.MaximumLength = (USHORT)pvbi->NameLength; uniKeyName.Buffer = pvbi->Name; //將鍵值輸出 DbgPrint("第%d個鍵值名稱是:%wZ\n",i,&uniKeyName); //判斷鍵值的類型 if (pvbi->Type==REG_SZ) { DbgPrint("鍵值的類型是:REG_SZ\n"); } else if (pvbi->Type==REG_MULTI_SZ) { DbgPrint("鍵值的類型是:REG_MULTI_SZ\n"); } else if (pvbi->Type==REG_DWORD) { KdPrint(("鍵值的類型是:REG_DWORD\n")); } else if (pvbi->Type==REG_BINARY) { KdPrint(("鍵值的類型是:REG_BINARY\n")); } ExFreePool(pvbi); } ExFreePool(pfi); ZwClose(hRegister); return STATUS_SUCCESS; } NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { MyRegEnumSubValue(); DriverObject->DriverUnload = DriverUnload; return STATUS_SUCCESS; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看