143 lines
3 KiB
C
143 lines
3 KiB
C
|
|
/*++
|
|
|
|
Copyright (c) 1997-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
devinst.c
|
|
|
|
Abstract:
|
|
|
|
device instance id test
|
|
|
|
Author:
|
|
|
|
16-Jan-1997 AlanWar
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <windows.h>
|
|
#include <ole2.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#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 <device instance name>\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);
|
|
}
|
|
|