SCardGetReaderDeviceInstanceIdA 函数 (winscard.h)

SCardGetReaderDeviceInstanceId 函数获取给定读取器名称卡读取器的设备实例标识符。 此函数不会影响读取器的状态。

语法

LONG SCardGetReaderDeviceInstanceIdA(
  [in]            SCARDCONTEXT hContext,
  [in]            LPCSTR       szReaderName,
  [out, optional] LPSTR        szDeviceInstanceId,
  [in, out]       LPDWORD      pcchDeviceInstanceId
);

参数

[in] hContext

标识查询的资源管理器上下文的句柄。 可以通过之前调用 SCardEstablishContext 函数来设置资源管理器上下文。 此参数不能为 NULL

[in] szReaderName

读取者名称。 可以通过调用 SCardListReaders 函数来获取此值。

[out, optional] szDeviceInstanceId

接收读取器的设备实例 ID 的缓冲区。 如果此值为 NULL,则该函数将忽略 cchDeviceInstanceId 参数中提供的缓冲区长度,将此参数未为 NULL 时返回的缓冲区长度写入 cchDeviceInstanceId,并返回成功代码。

[in, out] pcchDeviceInstanceId

szDeviceInstanceId 缓冲区的长度(以字符为单位),包括 NULL 终止符。 如果将缓冲区长度指定为 SCARD_AUTOALLOCATE,则 szDeviceInstanceId 参数将转换为指向字节指针的指针,并接收包含实例 ID 的内存块的地址。此内存块必须与 SCardFreeMemory 函数解除分配。

返回值

此函数根据是成功还是失败返回不同的值。

返回代码 说明
Success
SCARD_S_SUCCESS。
失败
错误代码。 有关详细信息,请参阅 智能卡返回值

注解

不会重定向此函数。 在远程桌面会话内调用 SCardGetReaderDeviceInstanceId 函数失败并显示SCARD_E_READER_UNAVAILABLE错误代码。

示例


LONG     lReturn;
LPTSTR   szReaderName = "USB Smart Card Reader 0";
WCHAR    szDeviceInstanceId[256];
DWORD    cchDeviceInstanceId = 256;

// Retrieve the reader's device instance ID.
// hContext was set by a previous call to SCardEstablishContext.
lReturn = SCardGetReaderDeviceInstanceId (hContext,
                         szReaderName,
                         szDeviceInstanceId,
                         &cchDeviceInstanceId);

if ( SCARD_S_SUCCESS != lReturn )
{
    printf("Failed SCardGetReaderDeviceInstanceId - %x\n", lReturn);
    // Take appropriate action.
}



注意

winscard.h 标头将 SCardGetReaderDeviceInstanceId 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows 8 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 [仅限桌面应用]
目标平台 Windows
标头 winscard.h