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 に置き換えてしまえば動作したんだけどね
ほんとだ、PhysX 有効になったわ
WLUに v2.4d9のゲーム対応版のプロトタイプ v.2.4d8Gっての置いておきます・ω・
(バージョン間違えたのだけど、仮提供ということで、セキュリティアップデートの時に直します)
Comments