Анализатор сообщает, что определенный параметр не инициализирован. Я не понимаю, почему.
Код:
LPTSTR buffer = NULL;
DWORD reqSize = 16000;
DWORD dataType;
LPTSTR * array;
DWORD szChars;
BOOL bRegProp;
// Allocate buffer according to required size
buffer = new TCHAR[(reqSize /sizeof(TCHAR))+2];
if(!buffer)
return NULL;
// Get the string into the buffer
if (FALSE == SetupDiGetDeviceRegistryProperty(Devs, DevInfo, Prop, &dataType, (LPBYTE)buffer, reqSize, &reqSize))
return NULL;
szChars = reqSize/sizeof(TCHAR);
buffer[szChars] = TEXT('\0');
Жалобы анализатора:
Теперь, согласно аннотации SAL для этой функции, вам нужно убедиться, что она не возвращает false:
_Success_(return != FALSE)
_When_((*PropertyRegDataType == REG_SZ), _At_((PSTR) PropertyBuffer, _Post_valid_))
_When_((*PropertyRegDataType == REG_MULTI_SZ), _At_((PZZSTR) PropertyBuffer, _Post_valid_))
WINSETUPAPI
BOOL
WINAPI
SetupDiGetDeviceRegistryPropertyA(
_In_ HDEVINFO DeviceInfoSet,
_In_ PSP_DEVINFO_DATA DeviceInfoData,
_In_ DWORD Property,
_Out_opt_ PDWORD PropertyRegDataType,
_Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer,
_In_ DWORD PropertyBufferSize,
_Out_opt_ PDWORD RequiredSize
);
Может быть, я скучаю покогда» вещь?
Я думаю, что вы должны проверить это dataType
является REG_SZ
(или же REG_MULTI_SZ
если необходимо).
В пунктах «когда» говорится «если dataType
то есть REG_SZ, то buffer
будет инициализирован «… но анализатор не знает, что это был не REG_DWORD, который был сохранен в reqSize
(да, я знаю, что это не то, где функция хранит REG_DWORDs, но анализатор не).
Других решений пока нет …