ReactOS 0.4.17-dev-1196-gb6224c3
id.c File Reference
#include <pci.h>
#include <stdio.h>
#include <debug.h>
Include dependency graph for id.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

PWCHAR NTAPI PciGetDescriptionMessage (IN ULONG Identifier, OUT PULONG Length)
 
PWCHAR NTAPI PciGetDeviceDescriptionMessage (IN UCHAR BaseClass, IN UCHAR SubClass)
 
VOID NTAPI PciInitIdBuffer (IN PPCI_ID_BUFFER IdBuffer)
 
ULONG __cdecl PciIdPrintf (IN PPCI_ID_BUFFER IdBuffer, IN PCCH Format,...)
 
ULONG __cdecl PciIdPrintfAppend (IN PPCI_ID_BUFFER IdBuffer, IN PCCH Format,...)
 
NTSTATUS NTAPI PciQueryId (IN PPCI_PDO_EXTENSION DeviceExtension, IN BUS_QUERY_ID_TYPE QueryType, OUT PWCHAR *Buffer)
 
NTSTATUS NTAPI PciQueryDeviceText (IN PPCI_PDO_EXTENSION PdoExtension, IN DEVICE_TEXT_TYPE QueryType, IN ULONG Locale, OUT PWCHAR *Buffer)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 14 of file id.c.

Function Documentation

◆ PciGetDescriptionMessage()

PWCHAR NTAPI PciGetDescriptionMessage ( IN ULONG  Identifier,
OUT PULONG  Length 
)

Definition at line 21 of file id.c.

23{
25 ULONG MaxCount, Count;
27 ANSI_STRING MessageString;
30
31 /* Find the message identifier in the message table */
32 MessageString.Buffer = NULL;
37 &Entry);
38 if (!NT_SUCCESS(Status)) return NULL;
39
40 /* Check if the resource data is Unicode or ANSI */
42 {
44
45 /* The entry is padded after its terminator, so measure up to the first NUL */
46 Description = (PWCHAR)Entry->Text;
47 MaxCount = (Entry->Length - FIELD_OFFSET(MESSAGE_RESOURCE_ENTRY, Text)) / sizeof(*Description);
48 Count = 0;
49 while ((Count < MaxCount) && (Description[Count] != UNICODE_NULL))
50 {
51 Count++;
52 }
53
54 /* Drop the trailing line break, where there is one */
55 while (Count && ((Description[Count - 1] == L'\n') ||
56 (Description[Count - 1] == L'\r')))
57 {
58 Count--;
59 }
60
61 /* Allocate the buffer to hold the message string */
63 (Count + 1) * sizeof(*Buffer),
64 'BicP');
65 if (!Buffer) return NULL;
66
67 /* Copy the message across and terminate it */
70
71 /* Return the length to the caller, minus the terminating NULL */
72 if (Length)
73 *Length = Count * sizeof(*Buffer);
74 }
75 else
76 {
77 /* Initialize the entry as a string */
78 RtlInitAnsiString(&MessageString, (PCHAR)Entry->Text);
79
80 /* Drop the trailing line break, where there is one */
81 while (MessageString.Length &&
82 ((MessageString.Buffer[MessageString.Length - 1] == '\n') ||
83 (MessageString.Buffer[MessageString.Length - 1] == '\r')))
84 {
85 MessageString.Length -= sizeof(*MessageString.Buffer);
86 }
87
88 /* Convert it to Unicode */
90 if (!NT_SUCCESS(Status))
91 return NULL;
92
94
95 /* Return the length to the caller */
97 }
98
99 /* Return the message buffer to the caller */
100 return Buffer;
101}
@ Identifier
Definition: asmpp.cpp:103
LONG NTSTATUS
Definition: precomp.h:26
Definition: bufpool.h:45
char * Text
Definition: combotst.c:136
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define L(x)
Definition: resources.c:13
PDRIVER_OBJECT PciDriverObject
Definition: init.c:19
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PagedPool
Definition: env_spec_w32.h:308
Status
Definition: gdiplustypes.h:24
#define ASSERT(a)
Definition: mode.c:44
NTSYSAPI NTSTATUS NTAPI RtlFindMessage(_In_ PVOID BaseAddress, _In_ ULONG Type, _In_ ULONG Language, _In_ ULONG MessageId, _Out_ PMESSAGE_RESOURCE_ENTRY *MessageResourceEntry)
#define MESSAGE_RESOURCE_UNICODE
Definition: rtltypes.h:1952
int Count
Definition: noreturn.cpp:7
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define UNICODE_NULL
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
_Must_inspect_result_ _In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ LPGUID _In_opt_ HANDLE _In_opt_ ULONG _In_opt_ ULONG _In_opt_ ULONG _In_opt_ PLARGE_INTEGER _In_opt_ PUNICODE_STRING Description
Definition: nttmapi.h:425
#define RT_MESSAGETABLE
Definition: pedump.c:373
#define LANG_NEUTRAL
Definition: nls.h:22
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_NEUTRAL
Definition: nls.h:167
Entry
Definition: section.c:5216
PVOID DriverStart
Definition: iotypes.h:2294
Definition: rtltypes.h:1958
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint16_t * PWCHAR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_opt_ PCUNICODE_STRING UnicodeString
Definition: wdfstring.h:64

Referenced by PciGetDeviceDescriptionMessage(), and PciQueryDeviceText().

◆ PciGetDeviceDescriptionMessage()

PWCHAR NTAPI PciGetDeviceDescriptionMessage ( IN UCHAR  BaseClass,
IN UCHAR  SubClass 
)

Definition at line 105 of file id.c.

107{
110
111 /* The message identifier in the table is encoded based on the PCI class */
112 Identifier = (BaseClass << 8) | SubClass;
113
114 /* Go grab the description message for this device */
116 if (!Message)
117 {
118 /* It wasn't found, allocate a buffer for a generic description */
119 Message = ExAllocatePoolWithTag(PagedPool, sizeof(L"PCI Device"), 'bicP');
120 if (Message) RtlCopyMemory(Message, L"PCI Device", sizeof(L"PCI Device"));
121 }
122
123 /* Return the description message */
124 return Message;
125}
static const WCHAR Message[]
Definition: register.c:74
PWCHAR NTAPI PciGetDescriptionMessage(IN ULONG Identifier, OUT PULONG Length)
Definition: id.c:21

Referenced by PciQueryDeviceText(), and PciScanBus().

◆ PciIdPrintf()

ULONG __cdecl PciIdPrintf ( IN PPCI_ID_BUFFER  IdBuffer,
IN PCCH  Format,
  ... 
)

Definition at line 139 of file id.c.

142{
145 va_list va;
146
147 ASSERT(IdBuffer->Count < MAX_ANSI_STRINGS);
148
149 /* Do the actual string formatting into the character buffer */
150 va_start(va, Format);
151 vsprintf(IdBuffer->CharBuffer, Format, va);
152 va_end(va);
153
154 /* Initialize the ANSI_STRING that will hold this string buffer */
155 AnsiString = &IdBuffer->Strings[IdBuffer->Count];
156 RtlInitAnsiString(AnsiString, IdBuffer->CharBuffer);
157
158 /* Calculate the final size of the string, in Unicode */
160
161 /* Update hte buffer with the size,and update the character pointer */
162 IdBuffer->StringSize[IdBuffer->Count] = Size;
163 IdBuffer->TotalLength += Size;
164 Length = AnsiString->Length + sizeof(ANSI_NULL);
165 IdBuffer->CharBuffer += Length;
166
167 /* Move to the next string for next time */
168 IdBuffer->Count++;
169
170 /* Return the length */
171 return Length;
172}
#define va_end(v)
Definition: stdarg.h:28
#define va_start(v, l)
Definition: stdarg.h:26
_ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl vsprintf(char *, const char *, va_list) __WINE_CRT_PRINTF_ATTR(2
char * va_list
Definition: vadefs.h:50
@ AnsiString
Definition: dnslib.h:19
#define MAX_ANSI_STRINGS
Definition: pci.h:126
#define RtlAnsiStringToUnicodeSize(STRING)
Definition: nt_native.h:404
#define ANSI_NULL
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539

Referenced by PciQueryId().

◆ PciIdPrintfAppend()

ULONG __cdecl PciIdPrintfAppend ( IN PPCI_ID_BUFFER  IdBuffer,
IN PCCH  Format,
  ... 
)

Definition at line 176 of file id.c.

179{
180 ULONG NextId, Size, Length, MaxLength;
182 va_list va;
183
184 ASSERT(IdBuffer->Count);
185
186 /* Choose the next static ANSI_STRING to use */
187 NextId = IdBuffer->Count - 1;
188
189 /* Max length is from the end of the buffer up until the current pointer */
190 MaxLength = (PCHAR)(IdBuffer + 1) - IdBuffer->CharBuffer;
191
192 /* Do the actual append, and return the length this string took */
193 va_start(va, Format);
194 Length = vsprintf(IdBuffer->CharBuffer - 1, Format, va);
195 va_end(va);
196 ASSERT(Length < MaxLength);
197
198 /* Select the static ANSI_STRING, and update its length information */
199 AnsiString = &IdBuffer->Strings[NextId];
200 AnsiString->Length += Length;
201 AnsiString->MaximumLength += Length;
202
203 /* Calculate the final size of the string, in Unicode */
205
206 /* Only the growth of this string adds to the total, then move the character pointer */
207 IdBuffer->TotalLength += Size - IdBuffer->StringSize[NextId];
208 IdBuffer->StringSize[NextId] = Size;
209 IdBuffer->CharBuffer += Length;
210
211 /* Return the size */
212 return Size;
213}
#define PCHAR
Definition: match.c:90

Referenced by PciQueryId().

◆ PciInitIdBuffer()

VOID NTAPI PciInitIdBuffer ( IN PPCI_ID_BUFFER  IdBuffer)

Definition at line 129 of file id.c.

130{
131 /* Initialize the sizes to zero and the pointer to the start of the buffer */
132 IdBuffer->TotalLength = 0;
133 IdBuffer->Count = 0;
134 IdBuffer->CharBuffer = IdBuffer->BufferData;
135}

Referenced by PciQueryId().

◆ PciQueryDeviceText()

NTSTATUS NTAPI PciQueryDeviceText ( IN PPCI_PDO_EXTENSION  PdoExtension,
IN DEVICE_TEXT_TYPE  QueryType,
IN ULONG  Locale,
OUT PWCHAR *  Buffer 
)

Definition at line 422 of file id.c.

426{
427 PWCHAR MessageBuffer, LocationBuffer;
430
432
433 /* Check what the caller is requesting */
434 switch (QueryType)
435 {
437
438 /* Get the message from the resource section */
439 MessageBuffer = PciGetDeviceDescriptionMessage(PdoExtension->BaseClass,
440 PdoExtension->SubClass);
441
442 /* Return it to the caller, and select proper status code */
443 *Buffer = MessageBuffer;
444 Status = MessageBuffer ? STATUS_SUCCESS : STATUS_NOT_SUPPORTED;
445 break;
446
448
449 /* Get the message from the resource section */
450 MessageBuffer = PciGetDescriptionMessage(0x10000, &Length);
451 if (!MessageBuffer)
452 {
453 /* It should be there, but fail if it wasn't found for some reason */
455 break;
456 }
457
458 /* Add space for a null-terminator, and allocate the buffer */
459 Length += 2 * sizeof(UNICODE_NULL);
460 LocationBuffer = ExAllocatePoolWithTag(PagedPool,
461 Length * sizeof(WCHAR),
462 'BicP');
463 *Buffer = LocationBuffer;
464
465 /* Check if the allocation succeeded */
466 if (LocationBuffer)
467 {
468 /* Build the location string based on bus, function, and device */
469 _swprintf(LocationBuffer,
470 MessageBuffer,
471 PdoExtension->ParentFdoExtension->BaseBus,
472 PdoExtension->Slot.u.bits.FunctionNumber,
473 PdoExtension->Slot.u.bits.DeviceNumber);
474 }
475
476 /* Free the original string from the resource section */
477 ExFreePoolWithTag(MessageBuffer, 0);
478
479 /* Select the correct status */
481 break;
482
483 default:
484
485 /* Anything else is unsupported */
487 break;
488 }
489
490 /* Return whether or not a device text string was indeed found */
491 return Status;
492}
#define STATUS_NOT_SUPPORTED
Definition: d3dkmdt.h:48
@ PdoExtension
Definition: precomp.h:61
PWCHAR NTAPI PciGetDeviceDescriptionMessage(IN UCHAR BaseClass, IN UCHAR SubClass)
Definition: id.c:105
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
#define _swprintf(buf, format,...)
Definition: sprintf.c:56
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
_Must_inspect_result_ _In_ KTMOBJECT_TYPE QueryType
Definition: nttmapi.h:404
short WCHAR
Definition: pedump.c:58
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
@ DeviceTextLocationInformation
Definition: iotypes.h:2961
@ DeviceTextDescription
Definition: iotypes.h:2960

Referenced by PciPdoIrpQueryDeviceText().

◆ PciQueryId()

NTSTATUS NTAPI PciQueryId ( IN PPCI_PDO_EXTENSION  DeviceExtension,
IN BUS_QUERY_ID_TYPE  QueryType,
OUT PWCHAR *  Buffer 
)

Definition at line 217 of file id.c.

220{
221 ULONG SubsysId;
222 CHAR VendorString[22];
224 PPCI_FDO_EXTENSION ParentExtension;
226 ULONG i, Size;
228 PANSI_STRING NextString;
230 PCI_ID_BUFFER IdBuffer;
231 PAGED_CODE();
232
233 /* Assume failure */
235 *Buffer = NULL;
236
237 /* Start with the genric vendor string, which is the vendor ID + device ID */
238 sprintf(VendorString,
239 "PCI\\VEN_%04X&DEV_%04X",
240 DeviceExtension->VendorId,
241 DeviceExtension->DeviceId);
242
243 /* Initialize the PCI ID Buffer */
244 PciInitIdBuffer(&IdBuffer);
245
246 /* Build the subsystem ID as shown in PCI ID Strings */
247 SubsysId = DeviceExtension->SubsystemVendorId | (DeviceExtension->SubsystemId << 16);
248
249 /* Check what the caller is requesting */
250 switch (QueryType)
251 {
252 case BusQueryDeviceID:
253
254 /* A single ID, the vendor string + the revision ID */
255 PciIdPrintf(&IdBuffer,
256 "%s&SUBSYS_%08X&REV_%02X",
257 VendorString,
258 SubsysId,
259 DeviceExtension->RevisionId);
260 break;
261
263
264 /* First the vendor string + the subsystem ID + the revision ID */
265 PciIdPrintf(&IdBuffer,
266 "%s&SUBSYS_%08X&REV_%02X",
267 VendorString,
268 SubsysId,
269 DeviceExtension->RevisionId);
270
271 /* Next, without the revision */
272 PciIdPrintf(&IdBuffer,
273 "%s&SUBSYS_%08X",
274 VendorString,
275 SubsysId);
276
277 /* Next, the vendor string + the base class + sub class + progif */
278 PciIdPrintf(&IdBuffer,
279 "%s&CC_%02X%02X%02X",
280 VendorString,
281 DeviceExtension->BaseClass,
282 DeviceExtension->SubClass,
283 DeviceExtension->ProgIf);
284
285 /* Next, without the progif */
286 PciIdPrintf(&IdBuffer,
287 "%s&CC_%02X%02X",
288 VendorString,
289 DeviceExtension->BaseClass,
290 DeviceExtension->SubClass);
291
292 /* And finally, a terminator */
293 PciIdPrintf(&IdBuffer, "\0");
294 break;
295
297
298 /* First, the vendor + revision ID only */
299 PciIdPrintf(&IdBuffer,
300 "%s&REV_%02X",
301 VendorString,
302 DeviceExtension->RevisionId);
303
304 /* Next, the vendor string alone */
305 PciIdPrintf(&IdBuffer, "%s", VendorString);
306
307 /* Next, the vendor ID + the base class + the sub class + progif */
308 PciIdPrintf(&IdBuffer,
309 "PCI\\VEN_%04X&CC_%02X%02X%02X",
310 DeviceExtension->VendorId,
311 DeviceExtension->BaseClass,
312 DeviceExtension->SubClass,
313 DeviceExtension->ProgIf);
314
315 /* Now without the progif */
316 PciIdPrintf(&IdBuffer,
317 "PCI\\VEN_%04X&CC_%02X%02X",
318 DeviceExtension->VendorId,
319 DeviceExtension->BaseClass,
320 DeviceExtension->SubClass);
321
322 /* And then just the vendor ID itself */
323 PciIdPrintf(&IdBuffer,
324 "PCI\\VEN_%04X",
325 DeviceExtension->VendorId);
326
327 /* Then the base class + subclass + progif, without any vendor */
328 PciIdPrintf(&IdBuffer,
329 "PCI\\CC_%02X%02X%02X",
330 DeviceExtension->BaseClass,
331 DeviceExtension->SubClass,
332 DeviceExtension->ProgIf);
333
334 /* Next, without the progif */
335 PciIdPrintf(&IdBuffer,
336 "PCI\\CC_%02X%02X",
337 DeviceExtension->BaseClass,
338 DeviceExtension->SubClass);
339
340 /* And finally, a terminator */
341 PciIdPrintf(&IdBuffer, "\0");
342 break;
343
345
346 /* Start with a terminator */
347 PciIdPrintf(&IdBuffer, "\0");
348
349 /* And then encode the device and function number */
350 PciIdPrintfAppend(&IdBuffer,
351 "%02X",
352 (DeviceExtension->Slot.u.bits.DeviceNumber << 3) |
353 DeviceExtension->Slot.u.bits.FunctionNumber);
354
355 /* Loop every parent until the root */
356 ParentExtension = DeviceExtension->ParentFdoExtension;
357 while (!PCI_IS_ROOT_FDO(ParentExtension))
358 {
359 /* Two more digits and their terminator have to fit */
360 if ((IdBuffer.CharBuffer + 2) >
361 (IdBuffer.BufferData + sizeof(IdBuffer.BufferData)))
362 {
363 DPRINT1("PCIX - Bridge chain too deep for an instance ID\n");
365 }
366
367 /* And encode the parent's device and function number as well */
369 PciIdPrintfAppend(&IdBuffer,
370 "%02X",
371 (PdoExtension->Slot.u.bits.DeviceNumber << 3) |
372 PdoExtension->Slot.u.bits.FunctionNumber);
373
374 /* Move up to the next bridge */
375 ParentExtension = PdoExtension->ParentFdoExtension;
376 }
377 break;
378
379 default:
380
381 /* Unknown query type */
382 DPRINT1("PCIX - PciQueryId expected ID type = %d\n", QueryType);
384 }
385
386 /* Something should've been generated if this has been reached */
387 ASSERT(IdBuffer.Count > 0);
388
389 /* Allocate the final string buffer to hold the ID */
392
393 /* Build the UNICODE_STRING structure for it */
394 DPRINT("PCIX - PciQueryId(%d)\n", QueryType);
397
398 /* Loop every ID in the buffer */
399 for (i = 0; i < IdBuffer.Count; i++)
400 {
401 /* Select the ANSI_STRING for the ID */
402 NextString = &IdBuffer.Strings[i];
403 DPRINT(" <- \"%s\"\n", NextString->Buffer);
404
405 /* Convert it to a UNICODE_STRING */
408
409 /* Add it into the final destination buffer */
410 Size = IdBuffer.StringSize[i];
412 DestinationString.Buffer += (Size / sizeof(WCHAR));
413 }
414
415 /* Return the buffer to the caller and return status (should be success) */
417 return Status;
418}
#define PAGED_CODE()
#define DPRINT1
Definition: precomp.h:8
#define FALSE
Definition: types.h:117
#define PCI_IS_ROOT_FDO(x)
Definition: pci.h:42
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
ULONG __cdecl PciIdPrintfAppend(IN PPCI_ID_BUFFER IdBuffer, IN PCCH Format,...)
Definition: id.c:176
VOID NTAPI PciInitIdBuffer(IN PPCI_ID_BUFFER IdBuffer)
Definition: id.c:129
ULONG __cdecl PciIdPrintf(IN PPCI_ID_BUFFER IdBuffer, IN PCCH Format,...)
Definition: id.c:139
WCHAR StringBuffer[156]
Definition: ldrinit.c:41
#define sprintf
Definition: sprintf.c:45
_Out_ _Inout_ POEM_STRING DestinationString
Definition: rtlfuncs.h:1956
char CHAR
Definition: pedump.c:57
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
#define DPRINT
Definition: sndvol32.h:73
PVOID DeviceExtension
Definition: env_spec_w32.h:418
PDEVICE_OBJECT PhysicalDeviceObject
Definition: pci.h:249
struct _PCI_FDO_EXTENSION * ParentFdoExtension
Definition: pci.h:255
ULONG Count
Definition: pci.h:491
ULONG StringSize[MAX_ANSI_STRINGS]
Definition: pci.h:493
CHAR BufferData[256]
Definition: pci.h:496
ANSI_STRING Strings[MAX_ANSI_STRINGS]
Definition: pci.h:492
ULONG TotalLength
Definition: pci.h:494
PCHAR CharBuffer
Definition: pci.h:495
void * Buffer
Definition: sprintf.c:453
unsigned short MaximumLength
Definition: sprintf.c:452
@ BusQueryCompatibleIDs
Definition: iotypes.h:2953
@ BusQueryInstanceID
Definition: iotypes.h:2954
@ BusQueryDeviceID
Definition: iotypes.h:2951
@ BusQueryHardwareIDs
Definition: iotypes.h:2952

Referenced by PciPdoIrpQueryId().