拡張 Kernel v17lと GetTcpExTable2FromStackが機能しなかった理由

GetExtendedTcpTable を実装したiphlpapiで CurrPort の最新版が機能しなくなる件ですが、ようやく理由がわかりました

GetExtendedTcpTable は内部で  GetTcpExTable2FromStack をコールしているのですが、この時の TCP_TABLE_CLASS が深くかかわっていました。

TCP_TABLE_BASIC やTCP_TABLE_OWNER_PIDのときは問題ないのですが、TCP_TABLE_OWNER_MODULEを使うと、NtDeviceIoControlFileしたときに エラー 0x57(パラメータが間違っています)が返ってくるので、調べてみたところ、 NtDeviceIoControlFile をコールするときの InputBuffer のデータ並び

0: 0x400
4: 0x100
8: 0x200
0xc: 0x1
0x10: 関数番号(0x101/0x102/0x103/0x104/0x105/0x106/0x107/0x108/0x110)
0x14: 0
0x18: 0
0x1c: 0
0x20: 0

の様になってるんですが、Windows 2000の場合、0x106までにしか関数番号が対応してなかったのでした。(数字の詳しい意味まで分かりませんが)

とりあえず自前で処理したら動くようになったので組み込んだ v17l公開しました。

変更点は以下の通り。

ntdllに以下の関数追加。
vDbgPrintExWithPrefix
vDbgPrintEx
DbgPrintEx

advapi32 に以下の関数追加。
FlushTraceA
UpdateTraceW
UpdateTraceA
StopTraceW
StopTraceA
QueryTraceW
QueryTraceA
IsTokenUntrusted
EnumerateTraceGuids
GetInheritanceSourceA
TreeResetNamedSecurityInfoW
FreeInheritedFromArray
GetInheritanceSourceW

iphlpapiに以下の関数を追加
GetUdpExTable2FromStack
GetTcpExTable2FromStack

GetBestInterfaceEx
GetExtendedTcpTable
GetExtendedUdpTable
の処理内容を変更

Windows 2000 Kernel32 改造計画【BM】

おすすめ

13件のフィードバック

  1. PONUYON より:

    2012-07-29 14:45現在のv17lですが
    setupしようとするとhttpapi.dllが無いのでsetup終了しますってなります

  2. PONUYON より:

    16:25現在v17m落ちない ○乙
    ファイル名間違えた?
    反映されるのに多少時間掛かるならスマナイ

  3. PONUYON より:

    v17mやばいっすよ
    BsoD食います
    STOP:c0000139

  4. 黒翼猫 より:

    うーん、ntoskrnl.exe は カーネルコアv10なので別パッケージなので、
    拡張カーネルと関係ないのですが。
    念のためリパックした17m2をアップしておきました。
    こっちの環境のマルチコアだと問題ないので、これからHAL入れ替えて試してみます
    #17:25 追記、シングルコア環境で v17m2で問題なしでした。これから拡張コアv10a入れてみます

  5. PONUYON より:

    m2まだやっていません、instしたPCやっと復帰させました
    ntoskrnl.exe関係なかったです、ごめんなさい
    ntdll.dll
    user32.dll
    kernel32.dll
    戻したらBsoD出なくなったので、この辺りかな

  6. PONUYON より:

    リパックのm2問題ないです
    何が原因だったかわかるのでした
    差し支えなければ教えて貰えるとありがたいです

  7. 黒翼猫 より:

    複数の言語版を同時に圧縮したので、うまく更新されていなくて
    古いバイナリがパッケージングされていたのかもしれません。

  8. PONUYON より:

    レスすいません
    そう言う感じですか
    てっきり、私はおっちょこちょいなので、何かやらかしたのかと思ったのですけど
    違ったみたいですね
    それと、拡張コアじゃ無くカーネルの方なので
    HAL関連は関係ないの、少し考えれば分かりそうな物でしたね
    申し訳ない
    セーフでHAL関連の読み込みで固まっていたので
    頭の中で’HALかよ’って考え固まってしまってた

  9. しらた より:

    拡張カーネルv17m 英語版ですが、起動途中でprocedure entry point RtlPrefixUnicodeString が ntdll.dllに無いというエラーメッセージを表示してブルースクリーンで停止してしまいます。ここのところこうしたことがなかったので、起動しなかった場合の対処に欠けておりまして、もし、ntdll.dllの修正版が出ましたら、リカバリーコンソールから手動差し替えできるようしていただけますと助かります。

  10. しらた より:

    先ほどのエラーの件ですが、リカバリーコンソールから、手動で、v17k 英語版の ntdll.dll に差し替えたところ、とりあえず起動はするようになりました。v17m 英語版の修正版を待っております。

  11. 黒翼猫 より:

    海外サイトの方でも指摘があって、悩んでいたのですが、パッケージミスでした。
    どうやらアップロードしてたフォルダにあるバイナリが古かったみたいで、
    自分のPCに入れていた正式版がアップできてなかったようです。
    差し替えたのでお試しください。

  12. しらた より:

    たびたびすみません。再ダウンロードして試してみたのですが、状況は改善していません。どうも以前のv17m英語版がダウンロードされているように思えるのですが。

  13. 黒翼猫 より:

    確認してダウンロードしてみたら、確かに古いですね。
    再度アップロードしなおしたので確認してみてください。
    解凍のとき v17m2と表示されていれば最新です

コメントを残す

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