Windows 2000 の NdisWriteConfigration のバグ?

 NdisWriteConfiguration:
          push    ebp
          mov    ebp,esp
          sub    esp,00000034h
          push    ebx
          mov    ebx,[ebp+10h]
          push    esi
          mov    esi,[ebp+08h]
          push    edi
          xor    edi,edi
          and    byte ptr [ebp-01h],00h
          mov    [esi],edi
          mov    eax,[ebx+04h]
          mov    [ebp-0Ch],eax
          mov    eax,[ebp+14h]
          mov    ecx,[eax] //ParameterType
          sub    ecx,edi
          jz     L00020CCD // NdisParameterInteger
          dec    ecx
          dec    ecx
          jz     L00020CB7 // NdisParameterString
          dec    ecx
          jz     L00020CA0 // NdisParameterMultiString
          dec    ecx
          jz     L00020C8A // NdisParameterBinary
          mov    dword ptr [esi],C00000BBh //Error // NdisParameterHexInteger
          jmp    L00020CDC

Win2000

 NdisWriteConfiguration:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          sub    esp,00000034h
          mov    eax,[ebp+14h]
          push    ebx
          mov    ebx,[ebp+10h]
          push    esi
          mov    esi,[ebp+08h]
          and    dword ptr [esi],00000000h
          mov    ecx,[eax]
          test    ecx,ecx
          push    edi
          mov    edi,[ebx+04h]
          mov    byte ptr [ebp-01h],00h
          jl     L00020AC9 //Error
          xor    edx,edx
          inc    edx
          cmp    ecx,edx
          jle    L00020AB8 // NdisParameterInteger + NdisParameterHexInteger
          cmp    ecx,00000002h
          jz     L00020A62 //// NdisParameterString
          push    00000003h
          pop    edx
          cmp    ecx,edx
          jz     L00020AA2 // NdisParameterMultiString
          cmp    ecx,00000004h
          jnz    L00020AC9 //Error
 L00020A62: // NdisParameterBinary

windows XP

ちなみに、NdisReadConfigrationはちゃんと NdisParameterHexIntegerに対応してる
断言しよう。これはWin2000のNDIS.SYSが更新されていないことによるバグだ・ω・

          mov    ecx,[eax] //ParameterType
          sub    ecx,+01h
          jle     L00020CCD // NdisParameterInteger
          dec    ecx
          jz     L00020CB7 // NdisParameterString

修正するとこう。
後日アップします atherosの例のドライバは修正して v3にしておきました

多分
if (ParameterType <= NdisParameterHexInteger) と書くべきところを
if (ParameterType < NdisParameterHexInteger) と書いてしまったため処理が抜け落ちてしまっている

オマケ:
拡張カーネルのGetModuleHandleExA の 不具合

処理を何も考えずにUnicodeに変換して GetModuleHandlExWに渡していたので
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS が有効になっていた場合、
エラーになってNULLが返ってきていた。

使ってるプログラムをGetModuleHandleExW に置き換えてしまえば動作したんだけどね

cuda

ほんとだ、PhysX 有効になったわ

WLUに v2.4d9のゲーム対応版のプロトタイプ v.2.4d8Gっての置いておきます・ω・
(バージョン間違えたのだけど、仮提供ということで、セキュリティアップデートの時に直します)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です