Bagikan melalui


Mendaftar untuk Pemberitahuan Driver Sinkron

Untuk menggunakan pemberitahuan driver sinkron, driver perangkat menerapkan fungsi panggilan balik yang dipanggil sistem operasi saat Anda secara dinamis menambahkan prosesor baru ke partisi perangkat keras. Contoh kode berikut adalah prototipe untuk fungsi panggilan balik seperti itu:

// Prototype for the synchronous
// notification callback function
VOID
  SyncProcessorCallback(
    IN PVOID CallbackContext,
    IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext,
    IN PNTSTATUS OperationStatus
    );

Driver perangkat mendaftar untuk pemberitahuan driver sinkron dengan memanggil fungsi KeRegisterProcessorChangeCallback . Driver perangkat biasanya memanggil fungsi KeRegisterProcessorChangeCallback dari dalam fungsi DriverEntry-nya . Jika driver perangkat menentukan bendera KE_PROCESSOR_CHANGE_ADD_EXISTING, fungsi panggilan balik segera dipanggil untuk setiap prosesor aktif yang saat ini ada di partisi perangkat keras, selain dipanggil ketika prosesor baru ditambahkan ke partisi perangkat keras. Contoh kode berikut menunjukkan cara mendaftar untuk pemberitahuan driver sinkron:

PVOID CallbackRegistrationHandle;
NTSTATUS CallbackStatus = STATUS_SUCCESS;

// The driver's DriverEntry routine
NTSTATUS  DriverEntry(
    PDRIVER_OBJECT DriverObject,
    PUNICODE_STRING RegistryPath
    )
{
  ...

  // Register the callback function
  CallbackRegistrationHandle =
    KeRegisterProcessorChangeCallback(
      SyncProcessorCallback,
      &CallbackStatus,
      KE_PROCESSOR_CHANGE_ADD_EXISTING
      );

  // Check the result
  if (CallbackRegistrationHandle == NULL)
  {
    // Perform any necessary cleanup
    ...

    // Check the callback status
    if (CallbackStatus != STATUS_SUCCESS)
    {
      // Return the error status from the callback function
      return CallbackStatus;
    }
    else
    {
      // Return a generic error status
      return STATUS_UNSUCCESSFUL;
    }
  }

  ...

  return STATUS_SUCCESS;
}

Ketika driver perangkat harus berhenti menerima pemberitahuan driver sinkron, seperti ketika sedang dibongkar, driver harus membatalkan pendaftaran fungsi panggilan balik dengan memanggil fungsi KeDeregisterProcessorChangeCallback . Driver perangkat biasanya memanggil fungsi KeDeregisterProcessorChangeCallback dari dalam fungsi Unload-nya . Contoh kode berikut menunjukkan cara membatalkan pendaftaran fungsi panggilan balik:

// The driver's Unload routine
VOID
  Unload(
    IN PDRIVER_OBJECT DriverObject
    );
{
  ...

  // Unregister the callback function
  KeDeregisterProcessorChangeCallback(
    CallbackRegistrationHandle
    );

  ...
}