I want to check if a GUID structure is empty/all fields are 0. This is the code I wrote:
#include <windows.h>
static BOOL IsEmptyGuid(const GUID * const pGuid)
{
return \
(pGuid->Data1 == 0) &&
(pGuid->Data2 == 0) &&
(pGuid->Data3 == 0) &&
#ifdef _WIN64
(*(DWORD64 *)pGuid->Data4 == 0);
#else
(*(DWORD *)pGuid->Data4 == 0) && (*(DWORD *)(pGuid->Data4 + 4) == 0);
#endif
}
/* GUID definition from MSDN
typedef struct _GUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
*/
int main() {
GUID guid1;
guid1.Data1 = 0;
guid1.Data2 = 0;
guid1.Data3 = 0;
memset(guid1.Data4, 0x0, 8);
printf("Result: %u\n", IsEmptyGuid(&guid1));
}
A safer way to check if field Data4 equals 0 is to iterate over every byte and check for it's value. But, I find the code from above more expressive.
I would like to know, is it correct? Is it safe?
Thank you!