次の方法で共有


EngDeleteDriverObj 関数 (winddi.h)

EngDeleteDriverObj 関数は、デバイスマネージド リソースの追跡に使用されるハンドルを解放します。

構文

ENGAPI BOOL EngDeleteDriverObj(
  HDRVOBJ hdo,
  BOOL    bCallBack,
  BOOL    bLocked
);

パラメーター

hdo

削除するドライバー オブジェクトを処理します。 この GDI ハンドルは EngCreateDriverObj から取得されました。

bCallBack

クリーンアップ コールバックを呼び出す必要があるかどうかを指定します。 TRUE の場合、GDI はハンドル マネージャーから DRIVEROBJ を削除する前にクリーンアップ コールバックを呼び出します。 FALSE の場合、GDI はそうしません。 コールバック関数からエラーが返された場合、 EngDeleteDriverObj は失敗します。

bLocked

EngDeleteDriverObj が呼び出される前に、(EngLockDriverObj の呼び出しによって) オブジェクトがドライバーによってロックされたかどうかを指定します。 TRUE の場合、オブジェクトはロックされました。FALSE の場合、オブジェクトはロックされていません。

戻り値

関数が成功し、ハンドルが解放された場合、戻り値は TRUE です。ハンドルが解放されていない場合は FALSE ですEngCreateDriverObj で指定された pFreeObjProc ドライバー関数が FALSE を返した場合、EngDeleteDriverObj は失敗し、ハンドルは解放されません。 これは、クリーンアップ コールバックが (現在の DRIVEROBJ 構造体を解放するために) 別の DRIVEROBJ 構造体をロックする必要があり、他の DRIVEROBJ 構造体が別のスレッドによって使用されているために失敗した場合に発生する可能性があります。

解説

ハンドルが解放されると、関連付けられているドライバー リソースは GDI によって追跡されなくなり、プロセスの終了時に EngCreateDriverObj pFreeObjProc パラメーターによって指される関数は呼び出されません。 リソースが解放されていることを確認するのは、ドライバーの責任です。

ほとんどのドライバーは、終了時にオブジェクトをクリーンアップする方法で一貫している必要があります。 したがって、bCallback場合は TRUE を渡し、このドライバー リソースを解放するためにドライバーのクリーンアップ関数を呼び出す必要があることを GDI に示します。

bCallBack パラメーターは、コールバック関数を呼び出す必要があるかどうかを GDI に示します。 bCallBackTRUE を渡すと、ドライバーのクリーンアップ関数を呼び出してこのドライバー リソースを解放するように GDI に指示します。 FALSE を渡すと、GDI がクリーンアップ関数を呼び出すことができなくなります。 pFreeObjProc がFALSE を返した場合、EngDeleteDriverObj は失敗し、ハンドルは解放されません。 たとえば、 pFreeObjProc が現在の DRIVEROBJ 構造体を解放するために別の DRIVEROBJ 構造体をロックダウンする必要があり、構造体が別のスレッドによって使用されていたために失敗した場合に発生する可能性があります。 クリーンアップ時に pFreeObjProc が失敗することはありません。クリーンアップ スレッド以外のスレッドが実行されていないため、他のオブジェクトのロックは失敗しません。

bLocked パラメーターは、オブジェクトがドライバーによって既に 1 回ロックされていることを GDI に示します。 多くの場合、オブジェクトが削除される前に、ドライバーが最初に使用するようにロックダウンしている可能性があります。 これにより、ドライバーは最初にオブジェクトのロックを解除せずに GDI を呼び出すことができるため、ハンドルが解放される前に別のスレッドがドライバーに入ってロックダウンする可能性がなくなります。

要件

   
サポートされている最小のクライアント Windows 2000 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム ユニバーサル
Header winddi.h (Winddi.h を含む)
Library Win32k.lib
[DLL] Win32k.sys

関連項目

DRIVEROBJ

EngCreateDriverObj