/*++ Copyright (c) 1997-1999 Microsoft Corporation Module Name: devinst.c Abstract: device instance id test Author: 16-Jan-1997 AlanWar Revision History: --*/ #include #include #include #include #include #include #include #include "wmium.h" #include "wmiguid.h" #define OffsetToPtr(Base, Offset) ((PBYTE)((PBYTE)(Base) + (Offset))) BYTE Buffer[4096]; GUID InstanceInfoGuid = INSTANCE_INFO_GUID; void DumpCString(PCHAR What, PWCHAR String) { WCHAR Buf[MAX_PATH]; ULONG Len; memset(Buf, 0, MAX_PATH); Len = *String++; memcpy(Buf, String, Len); printf("%s -> %ws\n", What, Buf); } void DumpBuffer(PWNODE_SINGLE_INSTANCE Wnode ) { PWCHAR String; String = (PWCHAR)OffsetToPtr(Wnode, Wnode->DataBlockOffset); DumpCString("FriendlyName", String); String += (*String + sizeof(USHORT)) / sizeof(WCHAR); DumpCString("Description", String); String += (*String + sizeof(USHORT)) / sizeof(WCHAR); DumpCString("Location", String); String += (*String + sizeof(USHORT)) / sizeof(WCHAR); DumpCString("Manufacturer", String); String += (*String + sizeof(USHORT)) / sizeof(WCHAR); DumpCString("Service", String); String += (*String + sizeof(USHORT)) / sizeof(WCHAR); } void TestDevInst( void ) /* Bad length bad out buffer bad input bufffer */ { } int _cdecl main(int argc, char *argv[]) { CHAR DevInstA[MAX_PATH]; WMIHANDLE Handle; ULONG Status; ULONG SizeNeeded; ULONG BufLen; TestDevInst(); if (argc == 1) { printf("devinst \n"); return(0); } SizeNeeded = WmiDevInstToInstanceNameA(NULL, 0, argv[1], 0); printf("SizeNeedde (%s) -> %d\n", argv[1], SizeNeeded); SizeNeeded = WmiDevInstToInstanceNameA(DevInstA, SizeNeeded, argv[1], 0); printf("SizeNeedde (%s) -> %d\n", DevInstA, SizeNeeded); Status = WmiOpenBlock(&InstanceInfoGuid, 0, &Handle); if (Status != ERROR_SUCCESS) { printf("WmiOpenBlock -> %d\n", Status); } else { BufLen = sizeof(Buffer); Status = WmiQuerySingleInstance(Handle, DevInstA, &BufLen, (PVOID)Buffer); if (Status != ERROR_SUCCESS) { printf("WmiQuerySingleInstance -> %d\n", Status); } else { DumpBuffer((PWNODE_SINGLE_INSTANCE)Buffer); } WmiCloseBlock(Handle); } return(ERROR_SUCCESS); }