Bagikan melalui


!ndiskd.oid

Ekstensi !ndiskd.oid menampilkan informasi tentang permintaan OID NDIS. Jika Anda menjalankan ekstensi ini tanpa parameter, !ndiskd akan menampilkan daftar semua permintaan OID yang tertunda pada semua miniport dan filter. Setiap miniport atau filter memiliki paling banyak satu permintaan OID yang tertunda dan sejumlah permintaan OID yang diantrekan.

Perhatikan bahwa filter biasanya mengkloning permintaan OID dan meneruskan kloning ke bawah. Ini berarti bahwa bahkan jika protokol mengeluarkan satu permintaan OID, mungkin ada beberapa instans permintaan kloning: satu di setiap filter dan yang lain di miniport. !ndiskd.oid akan menampilkan setiap kloning secara terpisah, sehingga Anda mungkin melihat lebih banyak OID yang tertunda daripada protokol yang benar-benar dikeluarkan.

!ndiskd.oid [-handle <x>] [-legacyoid] [-nolimit>] [-miniport <x>] 

Parameter

-menangani
Menangani NDIS_OID_REQUEST

-legacyoid
Memperlakukan sebagai NDIS_REQUEST warisan alih-alih NDIS_OID_REQUEST.

-nolimit
Tidak membatasi jumlah OID tertunda yang ditampilkan.

-miniport
Menemukan permintaan OID yang tertunda pada tumpukan miniport ini.

DLL

Ndiskd.dll

Keterangan

!ndiskd.oid menunjukkan kepada Anda daftar semua OID yang tertunda pada sistem pada satu waktu, sehingga dapat membantu dalam sistem debugging macet atau 0x9F situasi pemeriksaan bug (DRIVER_POWER_STATE_FAILURE). Misalnya, menganalisis pemeriksaan bug 0x9F fiktif mengungkapkan bahwa sistem digantung pada IRP dan sedang menunggu NDIS. Dalam NDIS, RUN dari OS diterjemahkan ke dalam OID, termasuk transisi daya, jadi dengan menjalankan !ndiskd.oid Anda dapat melihat bahwa, dalam contoh ini, perangkat di bagian bawah tumpukan mungkin telah menempel pada OID_PNP_SET_POWER dan menggantung sisa tumpukan. Driver NDIS tidak boleh menunggu OID selama lebih dari satu detik, sehingga Anda kemudian dapat menyelidiki mengapa perangkat tersebut menyimpan OID yang tertunda terlalu lama untuk mencoba menyelesaikan masalah.

Contoh

Untuk melihat contoh OIDS yang tertunda pada sistem yang berjalan normal, atur titik henti pada rutinitas handler permintaan OID miniport (di driver miniport yang sesuai dengan miniport). Pertama, jalankan perintah !ndiskd.minidriver tanpa parameter untuk mendapatkan daftar driver miniport pada sistem. Dalam contoh output ini, cari handel untuk kdnic minidriver, ffffdf801418d650..

3: kd> !ndiskd.minidriver
    ffffdf8015a98380 - tunnel
    ffffdf801418d650 - kdnic

Klik handel untuk minidriver, lalu klik tautan "Handler" di bagian bawah halaman detailnya untuk melihat daftar handler-nya. Anda dapat memasukkan perintah !ndiskd.minidriver -handle -handlers . Setelah Anda memiliki daftar handler minidriver, cari OidRequestHandler, yang handelnya adalah fffff80f1fd71c90 dalam contoh ini.

2: kd> !ndiskd.minidriver ffffdf801418d650 -handlers


HANDLERS

    NDIS Handler                           Function pointer   Symbol (if available)
    InitializeHandlerEx                    fffff80f1fd78230  bp
    SetOptionsHandler                      fffff80f1fd72800  bp
    HaltHandlerEx                          fffff80f1fd78040  bp
    ShutdownHandlerEx                      fffff80f1fd722c0  bp

    CheckForHangHandlerEx                  fffff80f1fd72810  bp
    ResetHandlerEx                         fffff80f1fd72f70  bp

    PauseHandler                           fffff80f1fd78000  bp
    RestartHandler                         fffff80f1fd78940  bp

    OidRequestHandler                      fffff80f1fd71c90  bp
    CancelOidRequestHandler                fffff80f1fd722c0  bp
    DirectOidRequestHandler                [None]
    CancelDirectOidRequestHandler          [None]
    DevicePnPEventNotifyHandler            fffff80f1fd789a0  bp

    SendNetBufferListsHandler              fffff80f1fd71870  bp
    ReturnNetBufferListsHandler            fffff80f1fd71b50  bp
    CancelSendHandler                      fffff80f1fd722c0  bp

Sekarang klik tautan "bp" di sebelah kanan OidRequestHandler atau masukkan perintah bp -handle dengan handelnya untuk mengatur titik henti pada rutinitas tersebut. Selanjutnya, ketik perintah g untuk memungkinkan mesin target debugee Anda berjalan dan mencapai titik henti yang baru saja Anda tetapkan.

2: kd> bp fffff80f1fd71c90
2: kd> g
Breakpoint 1 hit
fffff80f`1fd71c90 448b4204        mov     r8d,dword ptr [rdx+4]

Setelah Anda memicu titik henti pada rutinitas handler permintaan OID minidriver seperti yang ditunjukkan oleh contoh sebelumnya, Anda dapat menjalankan perintah !ndiskd.oid untuk melihat daftar semua OID yang tertunda pada sistem.

1: kd> !ndiskd.oid


ALL PENDING OIDs

    NetAdapter         ffffdf80140c71a0 - Microsoft Kernel Debug Network Adapter
        Current OID        OID_GEN_STATISTICS
    Filter             ffffdf8014950c70 - Microsoft Kernel Debug Network Adapter-WFP Native MAC Layer LightWeight Filter-0000
        Current OID        OID_GEN_STATISTICS
    Filter             ffffdf801494dc70 - Microsoft Kernel Debug Network Adapter-QoS Packet Scheduler-0000
        Current OID        OID_GEN_STATISTICS

Dalam contoh ini, OID yang tertunda OID_GEN_STATISTICS. Ketika Anda melihat hasil !ndiskd.oid, ingat bahwa filter mengkloning permintaan OID dan meneruskannya ke tumpukan, dan OID biasanya diteruskan dari filter ke filter ke miniport. Oleh karena itu, meskipun mungkin terlihat seperti ada tiga permintaan OID terpisah dengan nama yang sama dalam contoh ini, sebenarnya ada satu operasi logis yang berlangsung yang secara fisik tersebar di 3 OKID dan pada 3 driver.

Lihat juga

Panduan Desain Driver Jaringan

Referensi Jaringan Windows Vista dan Yang Lebih Baru

Men-debug Tumpukan Jaringan

Ekstensi NDIS (Ndiskd.dll)

!ndiskd.help

pemeriksaan bug 0x9F

OID_PNP_SET_POWER

bp, bu, bm (Set Breakpoint)

OID_GEN_STATISTICS

OID NDIS

Antarmuka Permintaan OID NDIS