BOOL autoAllocate = FALSE;
LONG status;
DWORD cbAttrLen = 0;
- LPBYTE* ppbAttr = NULL;
+ LPBYTE pbAttr = NULL;
GetAttrib_Return ret = { 0 };
IRP* irp = operation->irp;
const GetAttrib_Call* call = operation->call;
if (!call->fpbAttrIsNULL)
{
autoAllocate = (call->cbAttrLen == SCARD_AUTOALLOCATE) ? TRUE : FALSE;
- *ppbAttr = autoAllocate ? (LPBYTE) & (ret.pbAttr) : ret.pbAttr;
+ pbAttr = autoAllocate ? (LPBYTE) & (ret.pbAttr) : ret.pbAttr;
cbAttrLen = call->cbAttrLen;
}
return SCARD_E_NO_MEMORY;
}
- ret.ReturnCode = SCardGetAttrib(operation->hCard, call->dwAttrId, *ppbAttr, &cbAttrLen);
-
+ ret.ReturnCode = SCardGetAttrib(operation->hCard, call->dwAttrId, pbAttr, &cbAttrLen);
log_status_error(TAG, "SCardGetAttrib", ret.ReturnCode);
ret.cbAttrLen = cbAttrLen;
if (!hContext)
return SCARD_E_INVALID_HANDLE;
- if (!pbAttr || !pcbAttrLen)
+ if (!pcbAttrLen)
return SCARD_E_INVALID_PARAMETER;
if (*pcbAttrLen == SCARD_AUTOALLOCATE)
+ {
+ if (!pbAttr)
+ return SCARD_E_INVALID_PARAMETER;
pcbAttrLenAlloc = TRUE;
+ }
pcsc_cbAttrLen = pcbAttrLenAlloc ? PCSC_SCARD_AUTOALLOCATE : (PCSC_DWORD)*pcbAttrLen;
if (status == SCARD_S_SUCCESS)
{
- *conv.ppb = (BYTE*)calloc(1, pcsc_cbAttrLen);
+ BYTE* tmp = (BYTE*)calloc(1, pcsc_cbAttrLen);
- if (!*conv.ppb)
+ if (!tmp)
return SCARD_E_NO_MEMORY;
- status = g_PCSC.pfnSCardGetAttrib(hCard, pcsc_dwAttrId, *conv.ppb, &pcsc_cbAttrLen);
+ status = g_PCSC.pfnSCardGetAttrib(hCard, pcsc_dwAttrId, tmp, &pcsc_cbAttrLen);
if (status != SCARD_S_SUCCESS)
- free(*conv.ppb);
+ free(tmp);
else
- PCSC_AddMemoryBlock(hContext, *conv.ppb);
+ PCSC_AddMemoryBlock(hContext, tmp);
+ *conv.ppb = tmp;
}
}
else
if (!hContext)
return SCARD_E_INVALID_HANDLE;
+ if (!pcbAttrLen)
+ return SCARD_E_INVALID_PARAMETER;
cbAttrLen = *pcbAttrLen;
*pcbAttrLen = SCARD_AUTOALLOCATE;
status = PCSC_SCardGetAttrib_Internal(hCard, SCARD_ATTR_DEVICE_FRIENDLY_NAME_A,
BYTE** ppb;
} conv;
+ if (NULL == pcbAttrLen)
+ return SCARD_E_INVALID_PARAMETER;
+
conv.pb = pbAttr;
cbAttrLen = *pcbAttrLen;
if (*pcbAttrLen == SCARD_AUTOALLOCATE)
{
+ if (NULL == pbAttr)
+ return SCARD_E_INVALID_PARAMETER;
+
pcbAttrLenAlloc = TRUE;
*conv.ppb = NULL;
}
WINPR_UNUSED(hContext);
WINPR_UNUSED(szReaderName);
WINPR_UNUSED(pdwDeviceTypeId);
- return SCARD_E_UNSUPPORTED_FEATURE;
+ if (pdwDeviceTypeId)
+ *pdwDeviceTypeId = SCARD_READER_TYPE_USB;
+ return SCARD_S_SUCCESS;
}
static LONG WINAPI PCSC_SCardGetDeviceTypeIdW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
WINPR_UNUSED(hContext);
WINPR_UNUSED(szReaderName);
if (pdwDeviceTypeId)
- *pdwDeviceTypeId = 0;
- return SCARD_E_UNSUPPORTED_FEATURE;
+ *pdwDeviceTypeId = SCARD_READER_TYPE_USB;
+ return SCARD_S_SUCCESS;
}
static LONG WINAPI PCSC_SCardGetReaderDeviceInstanceIdA(SCARDCONTEXT hContext, LPCSTR szReaderName,