IDiscRecorder2::AcquireExclusiveAccess メソッド (imapi2.h)

デバイスへの排他的アクセスを取得します。

構文

HRESULT AcquireExclusiveAccess(
  [in] VARIANT_BOOL force,
  [in] BSTR         __MIDL__IDiscRecorder20000
);

パラメーター

[in] force

VARIANT_TRUE に設定すると、ファイル システム ボリュームをマウント解除できるかどうかに関係なく、ボリュームに排他的にアクセスできます。 VARIANT_FALSE場合、このメソッドは、ボリュームにマウントされたファイル システムがない場合にのみ排他アクセス権を取得します。

[in] __MIDL__IDiscRecorder20000

排他アクセスを要求するクライアント アプリケーションのフレンドリ名を含む文字列。 NULL または長さ 0 の文字列を指定することはできません。 文字列は、DDK で見つかったIOCTL_CDROM_EXCLUSIVE_ACCESS制御コードの制限に準拠している必要があります。

戻り値

S_OKは成功時に返されますが、実装の結果として他の成功コードが返される場合があります。 次のエラー コードは、通常、操作の失敗時に返されますが、考えられる唯一のエラー値を表すわけではありません。

リターン コード 説明
E_FAIL
不特定のエラー。

値: 0x80004005

E_ACCESS_DENIED
デバイスは現在、別のアプリケーションで使用されています。

値: 0x80070005

E_INVALIDARG
1 つ以上の引数が無効です。

値: 0x80070057

E_OUTOFMEMORY
必要なメモリを割り当てませんでした。

値: 0x8007000E

E_IMAPI_RECORDER_COMMAND_TIMEOUT
デバイスは、タイムアウト期間内にコマンドを受け入れませんでした。 これは、デバイスが不整合な状態になったか、コマンドのタイムアウト値を増やす必要がある場合があります。

値: 0xC0AA020D

HRESULT_FROM_WIN32(ERROR_INVALID_HANDLE)
指定されたハンドルが無効です。

値: 6

HRESULT_FROM_WIN32(ERROR_DEV_NOT_EXIST)
指定したネットワーク リソースまたはデバイスが使用できなくなりました。

値: 55

E_IMAPI_RECORDER_LOCKED
前回の操作中にこのレコーダーに関連付けられているデバイスが排他的にロックされているため、この操作は失敗します。

値: 0xC0AA0210

注釈

IDiscFormat2Data::Write などの書き込み操作でロックが取得されるため、このメソッドを呼び出してロックを取得する必要はありません。

各レコーダーにはロックカウントがあります。 レコーダーの最初の呼び出しは、排他的アクセスのためにデバイスをロックします。 アプリケーションは AcquireExclusiveAccess メソッドを複数回使用して、デバイスに複数のロックを適用できます。 各呼び出しでは、ロック数が 1 ずつ増加します。

レコーダーのロックを解除する場合、他のクライアントのデバイスを解放するには、ロック数が 0 に達する必要があります。 IDiscRecorder2::ReleaseExclusiveAccess メソッドを呼び出すと、ロック数が 1 ずつデクリメントされます。

デバイスを解放するには、 AcquireExclusiveAccess メソッドと ReleaseExclusiveAccess メソッドの呼び出しの数が等しい必要があります。 排他アクセスを保持しているときにアプリケーションが予期せず終了したりクラッシュしたりした場合、CDROM.SYS ドライバーはこれらの排他ロックを自動的に解放します。

デバイスが既にロックされている場合は、 IDiscRecorder2::get_ExclusiveAccessOwner を呼び出して、現在排他的アクセス権を持つクライアント アプリケーションの名前を取得できます。

要件

要件
サポートされている最小のクライアント Windows Vista、SP2 を使用した Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー imapi2.h

こちらもご覧ください

IDiscRecorder2

IDiscRecorder2::ReleaseExclusiveAccess

IDiscRecorder2::get_ExclusiveAccessOwner