複数ロックの処理
Direct3D ランタイムでは、vertex バッファーとインデックス バッファーに複数のロックするを未処理にすることができます。 ユーザー モードのディスプレイ ドライバーは、Windows 2000 ディスプレイ ドライバー モデルのランタイムと同じ方法で複数のロックを処理する必要があります。
ユーザー モードのディスプレイ ドライバーは、既にロックされているリソースの LockAsync 関数の呼び出しに失敗してはなりません。 つまり、LockAsync 関数の最初の呼び出しがそのリソースのロックに成功した後、ドライバーは特定のリソースの LockAsync 関数の呼び出しを失敗させることはできません。 同様に、ドライバーは 錠 関数の最初の呼び出しがそのリソースのロックに成功した後、特定のリソースに対する 錠 関数の呼び出しを失敗させることはできません。 ランタイムは、ドライバーの LockAsync 関数に対して行う各呼び出しと、ドライバーの UnlockAsync 関数の呼び出しと一致します。 ランタイムは、ドライバーの Lock 関数に対して行う各呼び出しと、ドライバーの Unlock 関数の呼び出しと一致します。
D3DDDIARG_UNLOCKASYNC構造体が記述するリソースが、ドライバーの LockAsync 関数の以前の呼び出しによって実際にロックされていない限り、ユーザー モードディスプレイドライバーは UnlockAsync 関数の呼び出しを失敗させることはできません。 同様に、D3DDDIARG_UNLOCK構造体が記述するリソースがドライバーの Lock 関数の以前の呼び出しによって実際にロックされていない限り、ドライバーは Unlock 関数の呼び出しを失敗させることはできません。 リソースが以前にロックされていない状況では、 UnlockAsync と Unlock はE_INVALIDARGを返します。