IDiscRecorder2::AcquireExclusiveAccess 方法 (imapi2.h)

获取对设备的独占访问权限。

语法

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

参数

[in] force

设置为 VARIANT_TRUE 以获取对卷的独占访问权限,无论文件系统卷是否可以卸载。 如果VARIANT_FALSE,则仅当卷上没有装载文件系统时,此方法才获得独占访问权限。

[in] __MIDL__IDiscRecorder20000

包含请求独占访问的客户端应用程序的友好名称的字符串。 不能为 NULL 或零长度字符串。 字符串必须符合 DDK 中IOCTL_CDROM_EXCLUSIVE_ACCESS控制代码的限制。

返回值

S_OK成功后返回,但其他成功代码可能由于实现而返回。 以下错误代码通常在操作失败时返回,但不表示唯一可能的错误值:

返回代码 说明
E_FAIL
未知故障。

值:0x80004005

E_ACCESS_DENIED
设备当前正由另一个应用程序使用。

值:0x80070005

E_INVALIDARG
一个或多个参数无效。

值: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。

解锁记录器时,锁定计数必须达到零,以便为其他客户端释放设备。 调用 IDiscRecorder2::ReleaseExclusiveAccess 方法会将锁计数减一。

需要对 AcquireExclusiveAccessReleaseExclusiveAccess 方法进行相等数量的调用才能释放设备。 如果应用程序在保留独占访问权限时意外退出或崩溃,CDROM.SYS 驱动程序将自动释放这些独占锁。

如果设备已锁定,可以调用 IDiscRecorder2::get_ExclusiveAccessOwner 来检索当前具有独占访问权限的客户端应用程序的名称。

要求

要求
最低受支持的客户端 Windows Vista、Windows XP 和 SP2 [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 imapi2.h

另请参阅

IDiscRecorder2

IDiscRecorder2::ReleaseExclusiveAccess

IDiscRecorder2::get_ExclusiveAccessOwner