共用方式為


卸載用戶端模組

若要卸載用戶端模組,作業系統會呼叫用戶端模組的 Unload 函式。 如需如何在初始化期間指定用戶端模組的 Unload函式的詳細資訊,請參閱初始化和註冊用戶端模組

用戶端模組的 Unload 函式可確保用戶端模組會在從系統記憶體卸載用戶端模組之前,先從網路模組註冊器 (NMR) 取消註冊。 用戶端模組會藉由呼叫 NmrDeregisterClient 函式,從 NMR 起始取消註冊,而此函式通常會從其 Unload 函式呼叫。 用戶端模組在從 NMR 完全取消註冊之後,才能從其 Unload 函式傳回。 如果對 NmrDeregisterClient 的呼叫傳回STATUS_PENDING,用戶端模組必須呼叫 NmrWaitForClientDeregisterComplete 函式,等待取消註冊完成,才能從 其 Unload 函式傳回。

例如:

// Variable containing the handle for the registration
HANDLE ClientHandle;

// Unload function
VOID
  Unload(
    IN PDRIVER_OBJECT DriverObject
    )
{
  NTSTATUS Status;

  // Deregister the client module from the NMR
  Status =
    NmrDeregisterClient(
      ClientHandle
      );

  // Check if pending
  if (Status == STATUS_PENDING)
  {
    // Wait for the deregistration to be completed
    NmrWaitForClientDeregisterComplete(
      ClientHandle
      );
  }

  // An error occurred
  else
  {
    // Handle error
    ...
  }
}

如果用戶端模組註冊為多個 網路程式設計介面的用戶端, (NPIs) ,則必須針對它支援的每個 NPI 呼叫 NmrDeregisterClient 。 如果網路模組同時註冊為用戶端模組和提供者模組 (,即是一個 NPI 的用戶端,另一個 NPI) 的提供者,則必須同時呼叫 NmrDeregisterClientNmrDeregisterProvider

網路模組必須等到所有取消註冊都完成,才能從 其 Unload 函式傳回。

用戶端模組不需要從其Unload函式內呼叫NmrDeregisterClient。 例如,在用戶端模組是複雜驅動程式的子元件的情況下,當用戶端模組子元件停用時,可能會發生用戶端模組的取消註冊。 不過,在這種情況下,驅動程式仍必須確定用戶端模組已從 NMR 完全取消註冊,再從其 Unload 函式傳回。