駆動開発:Verifierを使用してBSOD 0 x 135または0 xD 6ブルースクリーンを生成し、解決


エラーコード0 x 135
エラーが0 x 135の場合、windbgでdumpファイルを分析しても何も見えません.ここでは大まかにして、参考にしてください.
STACK_TEXT:
807ec12c 840eb654 00000135 c0000005 807ec270 nt!KeBugCheckEx+0x1e
807ec144 840eaa14 83ec6494 00000000 807ec8b0 nt!CmpFatalFilter+0x17
807ec8b0 84080722 0000000e 807ec908 00000001 nt!CmpCallCallBacks+0x16d
807ec91c 8406f591 a8ff5668 a8ff5668 a8ff5650 nt!CmpDeleteKeyObject+0x81
807ec934 83ec4d60 00000000 85fdd4c0 a8ff5650 nt!ObpRemoveObjectRoutine+0x59
807ec948 83ec4cd0 a8ff5668 84092308 87801b28 nt!ObfDereferenceObjectWithTag+0x88
807ec950 84092308 87801b28 85fdd4c0 0000086c nt!ObfDereferenceObject+0xd
807ec990 8409202e 87801b28 a99850d8 85fd1020 nt!ObpCloseHandleTableEntry+0x21d
807ec9c0 8408e965 85fd1020 00000000 00000000 nt!ObpCloseHandle+0x7f
807ec9d8 8401065a 8000086c 00000000 00000000 nt!ObCloseHandle+0x40
807ecbbc 84013d98 00000001 00000000 807ecbe4 nt!IopLoadDriver+0xb61
807ecc00 83ec9aab ac9adbd0 00000000 85fdd4c0 nt!IopLoadUnloadDriver+0x70
807ecc50 84055f5e 00000001 36f5aa8c 00000000 nt!ExpWorkerThread+0x10d
807ecc90 83efd219 83ec999e 00000001 00000000 nt!PspSystemThreadStartup+0x9e
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x19 THREAD_SHA1_HASH_MOD_FUNC: 049e447e55a7b64e8d7f3231653085e63a317e65
THREAD_SHA1_HASH_MOD_FUNC_OFFSET: a997c0d526fdb0f4723fb306ecfdf66411f77893
THREAD_SHA1_HASH_MOD: 38bc5fec3f0409c265cf5c87da6f8f8859d0711c
FOLLOWUP_IP:
nt!CmpFatalFilter+17
840eb654 cc int 3
FAULT_INSTR_CODE: 909090cc
SYMBOL_STACK_INDEX: 1
SYMBOL_NAME: nt!CmpFatalFilter+17
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: nt
IMAGE_NAME: ntkrpamp.exe
DEBUG_FLR_IMAGE_TIMESTAMP: 4ce78a09
IMAGE_VERSION: 6.1.7601.17514
STACK_COMMAND: .thread ; .cxr ; kb
FAILURE_BUCKET_ID: 0x135_VRF_nt!CmpFatalFilter+17
BUCKET_ID: 0x135_VRF_nt!CmpFatalFilter+17
PRIMARY_PROBLEM_CLASS: 0x135_VRF_nt!CmpFatalFilter+17
TARGET_TIME: 2019-09-23T08:11:47.000Z
OSBUILD: 7601
OSSERVICEPACK: 1000
SERVICEPACK_NUMBER: 0
OS_REVISION: 0
SUITE_MASK: 272
PRODUCT_TYPE: 1
OSPLATFORM_TYPE: x86
OSNAME: Windows 7
OSEDITION: Windows 7 WinNt (Service Pack 1) TerminalServer SingleUserTS
OS_LOCALE:
USER_LCID: 0
OSBUILD_TIMESTAMP: 2010-11-20 16:42:49
BUILDDATESTAMP_STR: 101119-1850
BUILDLAB_STR: win7sp1_rtm
BUILDOSVER_STR: 6.1.7601.17514.x86fre.win7sp1_rtm.101119-1850
ANALYSIS_SESSION_ELAPSED_TIME: 2dc
ANALYSIS_SOURCE: KM
FAILURE_ID_HASH_STRING: km:0x135_vrf_nt!cmpfatalfilter+17
FAILURE_ID_HASH: {1cf614a7-193c-d67a-fc81-ffe957d678c0}
私は多くのフォーラムとWindowsの公式資料を調べましたが、0 x 135の誤った解釈の多くはドライバとは関係なく、ファイルが紛失したとか、フォーラムで投稿しても返事がありません.当時はwindbgで分析することもあまりできず、0 x 135のミスにはどうしようもなかった.だから私の個人は、Verifier検出駆動を使って0 x 135エラーを検出した後、0 x 135を分析するのは難しいかもしれませんが、もしあなたがちょうど私と同じようにクロスエラーがあったり、具体的な文に位置づけることができたら、必ずこれらの面から着手しなければなりません.
エラーコード0 xD 6および解決
しかし、私の場合、0 x 135はたまに0 xD 6と交差してエラーを報告し、0 xD 6のdumpファイルを分析するとコードにナビゲートします.
PCHAR pIo = (PCHAR)pIoBuffer;
const size_t cSize = strlen(pIo);
PCHAR pIoC = (PCHAR)ExAllocatePoolWithTag(NonPagedPool, sizeof(char)*(cSize + 1), REGISTRY_POOL_TAG);
RtlStringCbCopyA(pIoC, cSize * sizeof(char), pIo + sizeof(char));
int find = KStrFind(pIoC, '\\');/*      */

KStrFind関数に入ると、定義された付与文にナビゲートします.
int KStrFind(PCHAR string, const char sh)
{
 PCHAR test = string;
 size_t len = strlen(test);/*    */
 size_t i = 0;
 for (i = 0; i < len; i++)
 {
 //  
 }

私はいくつかの修正方法を試したことがありますが、最後にこの文自体に問題はないはずです.それから私は関連するいくつかのパラメータを含んでpIo、pIoC、cSize、lenなどの変数はすべて出力して、出力の中でpIoが空の情況があることを発見して、私はまた文
RtlStringCbCopyA(pIoC, cSize * sizeof(char), pIo + sizeof(char));

pIoポインタ後のsizeof(char)バイトの内容が参照されるため、pIoC自体の異常と入力パラメータの異常が発生する.最後にpIoCに対する前にpIoが空でないという判断を加え,0 x 135と0 xD 6のブルースクリーン問題が解決された.