Bagikan melalui


Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver NDIS

Untuk mengaktifkan SDV menganalisis driver NDIS, Anda harus mendeklarasikan fungsi Anda dengan menggunakan deklarasi jenis peran fungsi untuk NDIS. Jenis peran fungsi didefinisikan dalam Ndis.h.

Untuk daftar jenis peran fungsi dan fungsi panggilan balik peristiwa yang sesuai, lihat Deklarasi Fungsi NDIS Pemverifikasi Driver Statis.

Setiap fungsi panggilan balik dalam driver NDIS harus dideklarasikan dengan menentukan jenis peran yang sesuai.

Contoh kode berikut menunjukkan deklarasi jenis peran fungsi untuk fungsi panggilan balik MiniportPause . Dalam contoh ini, fungsi panggilan balik disebut myMiniportPause. Jenis peran fungsi MINIPORT_PAUSE.

MINIPORT_PAUSE myMiniportPause;

Jika fungsi panggilan balik memiliki deklarasi prototipe fungsi, Anda harus mengganti prototipe fungsi dengan deklarasi jenis peran fungsi.

Contoh berikut menunjukkan deklarasi fungsi NDIS dari file header MP.h, yang terletak di subdirektori SDV fail_drivers WDK. Fungsi terkait dideklarasikan dalam Main.c.

\tools\sdv\samples\fail_drivers\NDIS\fail_driver1.

/--------------------------------------
// Miniport routines in MAIN.C
//--------------------------------------

NDIS_STATUS
DriverEntry(
    IN  PDRIVER_OBJECT      DriverObject,
    IN  PUNICODE_STRING     RegistryPath
    );


MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE MPAllocateComplete;

MINIPORT_HALT MPHalt;
MINIPORT_SET_OPTIONS MPSetOptions;
MINIPORT_INITIALIZE MPInitialize;
MINIPORT_PAUSE MPPause;
MINIPORT_RESTART MPRestart;
MINIPORT_OID_REQUEST MPOidRequest;
MINIPORT_INTERRUPT_DPC MPHandleInterrupt;
MINIPORT_ISR MPIsr;
MINIPORT_RESET MPReset;
MINIPORT_RETURN_NET_BUFFER_LISTS MPReturnNetBufferLists;
MINIPORT_CANCEL_OID_REQUEST MPCancelOidRequest;
MINIPORT_SHUTDOWN MPShutdown;
MINIPORT_SEND_NET_BUFFER_LISTS MPSendNetBufferLists;
MINIPORT_CANCEL_SEND MPCancelSendNetBufferLists;
MINIPORT_DEVICE_PNP_EVENT_NOTIFY MPPnPEventNotify;
MINIPORT_UNLOAD MPUnload;
MINIPORT_CHECK_FOR_HANG MPCheckForHang;
MINIPORT_ENABLE_INTERRUPT MpEnableInterrupt;
MINIPORT_DISABLE_INTERRUPT MpDisableInterrupt;
MINIPORT_SYNCHRONIZE_INTERRUPT MPSynchronizeInterrupt;
MINIPORT_PROCESS_SG_LIST MPProcessSGList;
NDIS_TIMER_FUNCTION MpDemonstrationTimer;
NDIS_IO_WORKITEM MPQueuedWorkItem;

Parameter Fungsi dan Jenis Peran Fungsi

Seperti yang diperlukan dalam bahasa pemrograman C, jenis parameter yang Anda gunakan dalam definisi fungsi harus cocok dengan jenis parameter prototipe fungsi, atau dalam hal ini, jenis peran fungsi. SDV bergantung pada tanda tangan fungsi untuk analisis dan mengabaikan fungsi yang tanda tangannya tidak cocok.

Misalnya, Anda harus mendeklarasikan fungsi MiniportInterrupt menggunakan jenis peran fungsi MINIPORT_ISR:

MINIPORT_ISR myMPIsr;

Saat Anda menerapkan rutinitas interupsi, myMPIsr, jenis parameter harus cocok dengan yang digunakan oleh MINIPORT_ISR, yaitu, NDIS_HANDLE, PBOOLEAN, dan PULONG (lihat fungsi MiniportInterrupt untuk sintaks).

BOOLEAN 
myMPIsr(
    __in  NDIS_HANDLE      MiniportInterruptContext,
    __out PBOOLEAN        QueueMiniportInterruptDpcHandler,
    __out PULONG          TargetProcessors
    ) {
}

Menjalankan Analisis Kode untuk Driver untuk memverifikasi deklarasi fungsi

Untuk membantu Anda menentukan apakah kode sumber disiapkan, jalankan Analisis Kode untuk Driver. Analisis Kode untuk Driver memeriksa deklarasi jenis peran fungsi dan dapat membantu mengidentifikasi deklarasi fungsi yang mungkin terlewatkan atau memperingatkan Anda ketika parameter definisi fungsi tidak cocok dengan yang ada di jenis peran fungsi.