Bagikan melalui


Aturan IrqlExApcLte3 (wdm)

Aturan IrqlExApcLte3 menentukan bahwa driver memanggil rutinitas dukungan eksekutif berikut hanya di IRQL <= APC_LEVEL.

Driver yang memiliki kesalahan yang terkait dengan IRQL dapat menyebabkan masalah serius dan dapat menyebabkan komputer macet.

Model driver: WDM

Pemeriksaan bug ditemukan dengan aturan ini: Pemeriksaan Bug 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20007), 0xA Pemeriksaan Bug: IRQL_NOT_LESS_OR_EQUAL

Contoh

Kode berikut melanggar aturan ini:

NTSTATUS
DispatchRequest (
    _In_ PDEVICE_REQUEST DeviceRequest
    )
{  
    KIRQL OldIrql;
    KSPIN_LOCK SpinLock;
    NTSTATUS Status;
    ...

    KeInitializeSpinLock(&SpinLock);

    //
    // KeAcquireSpinLock sets IRQL to DISPATCH_LEVEL and the previous IRQL is 
    // written to OldIrql after the lock is acquired.
    //

    KeAcquireSpinLock(&SpinLock, &OldIrql);
    ...

    Status = ProcessRequest(DeviceRequest);

    //
    // KeReleaseSpinLock sets IRQL to the OldIrql returned by KeAcquireSpinLock.
    //

    KeReleaseSpinLock(&SpinLock, &OldIrql);
    ...
}

NTSTATUS
ProcessRequest (
    _In_ PDEVICE_REQUEST DeviceRequest
    )
{
    ERESOURCE Resource;
    NTSTATUS Status;
    ...

    Resource = DeviceRequest->GetTableLock();

    //
    // RULE VIOLATION! - ExAcquireSharedStarveExclusive can be called only at 
    //                   IRQL <= APC_LEVEL. 
    //

    if(!ExAcquireSharedStarveExclusive(&Resource, FALSE)) {
        return STATUS_UNSUCCESSFUL;
    }

    ...

    ExReleaseResourceLite(&Resource);
    ...
    return Status;
}

Cara menguji

Pada waktu kompilasi

Jalankan Pemverifikasi Driver Statis dan tentukan aturan IrqlExApcLte3 .

Gunakan langkah-langkah berikut untuk menjalankan analisis kode Anda:
  1. Siapkan kode Anda (gunakan deklarasi jenis peran).
  2. Jalankan Pemverifikasi Driver Statis.
  3. Lihat dan analisis hasilnya.

Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver.

Pada durasi

Jalankan Pemverifikasi Driver dan pilih opsi pemeriksaan kepatuhan DDI .

Berlaku untuk

ExAcquireResourceExclusiveLiteExAcquireResourceSharedLiteExAcquireSharedStarveExclusiveExAcquireSharedWaitForExclusiveExConvertExclusiveToSharedLiteExDeleteResourceLite

Lihat juga

Mengelola Prioritas Perangkat KerasMencegah Kesalahan dan Kebuntuan Saat Menggunakan Kunci Spin