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は成功時に返されますが、実装の結果として他の成功コードが返される場合があります。 次のエラー コードは、通常、操作の失敗時に返されますが、考えられる唯一のエラー値を表すわけではありません。
リターン コード | 説明 |
---|---|
|
不特定のエラー。
値: 0x80004005 |
|
デバイスは現在、別のアプリケーションで使用されています。
値: 0x80070005 |
|
1 つ以上の引数が無効です。
値: 0x80070057 |
|
必要なメモリを割り当てませんでした。
値: 0x8007000E |
|
デバイスは、タイムアウト期間内にコマンドを受け入れませんでした。 これは、デバイスが不整合な状態になったか、コマンドのタイムアウト値を増やす必要がある場合があります。
値: 0xC0AA020D |
|
指定されたハンドルが無効です。
値: 6 |
|
指定したネットワーク リソースまたはデバイスが使用できなくなりました。
値: 55 |
|
前回の操作中にこのレコーダーに関連付けられているデバイスが排他的にロックされているため、この操作は失敗します。
値: 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 |