ReactOS 0.4.16-dev-2293-g4d8327b
buspdo.cpp
Go to the documentation of this file.
1#include "driver.h"
2#include "adsp.h"
3
6 _In_ WDFDEVICE Device,
9);
10
14 WDFCHILDLIST DeviceList,
17)
18/*++
19Routine Description:
20 It is called when the framework needs to make a copy of a description.
21 This happens when a request is made to create a new child device by
22 calling WdfChildListAddOrUpdateChildDescriptionAsPresent.
23 If this function is left unspecified, RtlCopyMemory will be used to copy the
24 source description to destination. Memory for the description is managed by the
25 framework.
26 NOTE: Callback is invoked with an internal lock held. So do not call out
27 to any WDF function which will require this lock
28 (basically any other WDFCHILDLIST api)
29Arguments:
30 DeviceList - Handle to the default WDFCHILDLIST created by the framework.
31 SourceIdentificationDescription - Description of the child being created -memory in
32 the calling thread stack.
33 DestinationIdentificationDescription - Created by the framework in nonpaged pool.
34Return Value:
35 NT Status code.
36--*/
37{
39
41
44 Header);
47 Header);
48
49 SklHdAudBusPrint(DEBUG_LEVEL_INFO, DBG_INIT,
50 "%s\n", __func__);
51
52 dst->FdoContext = src->FdoContext;
53 RtlCopyMemory(&dst->CodecIds, &src->CodecIds, sizeof(dst->CodecIds));
54
55 return STATUS_SUCCESS;
56}
57
61 WDFCHILDLIST DeviceList,
64)
65/*++
66Routine Description:
67 It is called when the framework needs to compare one description with another.
68 Typically this happens whenever a request is made to add a new child device.
69 If this function is left unspecified, RtlCompareMemory will be used to compare the
70 descriptions.
71 NOTE: Callback is invoked with an internal lock held. So do not call out
72 to any WDF function which will require this lock
73 (basically any other WDFCHILDLIST api)
74Arguments:
75 DeviceList - Handle to the default WDFCHILDLIST created by the framework.
76Return Value:
77 TRUE or FALSE.
78--*/
79{
81
83
86 Header);
89 Header);
90
91 SklHdAudBusPrint(DEBUG_LEVEL_INFO, DBG_INIT,
92 "%s\n", __func__);
93
94 return (lhs->FdoContext == rhs->FdoContext) &&
95 (RtlCompareMemory(&lhs->CodecIds, &rhs->CodecIds, sizeof(lhs->CodecIds)) == sizeof(lhs->CodecIds));
96}
97
98VOID
101 _In_ WDFCHILDLIST DeviceList,
103)
104/*++
105Routine Description:
106 It is called to free up any memory resources allocated as part of the description.
107 This happens when a child device is unplugged or ejected from the bus.
108 Memory for the description itself will be freed by the framework.
109Arguments:
110 DeviceList - Handle to the default WDFCHILDLIST created by the framework.
111 IdentificationDescription - Description of the child being deleted
112Return Value:
113--*/
114{
117}
118
120NTAPI
122 WDFCHILDLIST DeviceList,
125)
126/*++
127Routine Description:
128 Called by the framework in response to Query-Device relation when
129 a new PDO for a child device needs to be created.
130Arguments:
131 DeviceList - Handle to the default WDFCHILDLIST created by the framework as part
132 of FDO.
133 IdentificationDescription - Decription of the new child device.
134 ChildInit - It's a opaque structure used in collecting device settings
135 and passed in as a parameter to CreateDevice.
136Return Value:
137 NT Status code.
138--*/
139{
141
142 PAGED_CODE();
143
146 Header);
147
148 SklHdAudBusPrint(DEBUG_LEVEL_INFO, DBG_INIT,
149 "%s\n", __func__);
150
151 return Bus_CreatePdo(WdfChildListGetDevice(DeviceList),
152 ChildInit,
153 pDesc);
154}
155
158 _In_ WDFDEVICE Device,
161)
162{
164
166 PPDO_DEVICE_DATA pdoData = NULL;
167 WDFDEVICE hChild = NULL;
169 WDF_OBJECT_ATTRIBUTES pdoAttributes;
172 DECLARE_CONST_UNICODE_STRING(deviceLocation, L"High Definition Audio Bus");
176
177 SklHdAudBusPrint(DEBUG_LEVEL_INFO, DBG_INIT,
178 "%s\n", __func__);
179
180 if (Desc->CodecIds.IsDSP) {
181 //
182 // Set DeviceType
183 //
184 WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_BUS_EXTENDER);
185
186 //
187 // Provide DeviceID, HardwareIDs, CompatibleIDs and InstanceId
188 //
189 status = RtlUnicodeStringPrintf(&deviceId, L"CSAUDIO\\ADSP&CTLR_VEN_%04X&CTLR_DEV_%04X",
190 Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId);
191 if (!NT_SUCCESS(status)) {
192 return status;
193 }
194
195 status = WdfPdoInitAssignInstanceID(DeviceInit, &deviceId);
196 if (!NT_SUCCESS(status)) {
197 return status;
198 }
199
200 status = WdfPdoInitAssignDeviceID(DeviceInit, &deviceId);
201 if (!NT_SUCCESS(status)) {
202 return status;
203 }
204
205 //
206 // NOTE: same string is used to initialize hardware id too
207 //
208 status = WdfPdoInitAddHardwareID(DeviceInit, &deviceId);
209 if (!NT_SUCCESS(status)) {
210 return status;
211 }
212
213 status = RtlUnicodeStringPrintf(&compatId, L"CSAUDIO\\ADSP&CTLR_VEN_%04X&CTLR_DEV_%04X",
214 Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId);
215 if (!NT_SUCCESS(status)) {
216 return status;
217 }
218
219 //
220 // NOTE: same string is used to initialize compat id too
221 //
222 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
223 if (!NT_SUCCESS(status)) {
224 return status;
225 }
226 }
227 else {
228 //
229 // Set DeviceType
230 //
231 WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_SOUND);
232
233 PWCHAR prefix = L"HDAUDIO";
234 PWCHAR funcPrefix = L"";
235 if (Desc->CodecIds.IsGraphicsCodec) {
236 funcPrefix = L"SGPC_";
237 }
238
239 //
240 // Provide DeviceID, HardwareIDs, CompatibleIDs and InstanceId
241 //
242 status = RtlUnicodeStringPrintf(&deviceId, L"%s\\%sFUNC_%02X&VEN_%04X&DEV_%04X&SUBSYS_%08X&REV_%04X",
243 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.SubsysId, Desc->CodecIds.RevId);
244 if (!NT_SUCCESS(status)) {
245 return status;
246 }
247
248 status = WdfPdoInitAssignDeviceID(DeviceInit, &deviceId);
249 if (!NT_SUCCESS(status)) {
250 return status;
251 }
252
253 //
254 // NOTE: same string is used to initialize hardware id too
255 //
256 status = WdfPdoInitAddHardwareID(DeviceInit, &deviceId);
257 if (!NT_SUCCESS(status)) {
258 return status;
259 }
260
261 //Add second hardware ID without Rev
262 status = RtlUnicodeStringPrintf(&deviceId, L"%s\\%sFUNC_%02X&VEN_%04X&DEV_%04X&SUBSYS_%08X",
263 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.SubsysId);
264 if (!NT_SUCCESS(status)) {
265 return status;
266 }
267
268 status = WdfPdoInitAddHardwareID(DeviceInit, &deviceId);
269 if (!NT_SUCCESS(status)) {
270 return status;
271 }
272
273 //Add Compatible Ids
274 {
275 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&CTLR_DEV_%02X&VEN_%04X&DEV_%04X&REV_%04X",
276 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.RevId);
277 if (!NT_SUCCESS(status)) {
278 return status;
279 }
280
281 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
282 if (!NT_SUCCESS(status)) {
283 return status;
284 }
285
286 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&VEN_%04X&DEV_%04X&REV_%04X",
287 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.RevId);
288 if (!NT_SUCCESS(status)) {
289 return status;
290 }
291
292 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
293 if (!NT_SUCCESS(status)) {
294 return status;
295 }
296
297 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&VEN_%04X&DEV_%04X&REV_%04X",
298 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.RevId);
299 if (!NT_SUCCESS(status)) {
300 return status;
301 }
302
303 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
304 if (!NT_SUCCESS(status)) {
305 return status;
306 }
307
308 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&CTLR_DEV_%02X&VEN_%04X&DEV_%04X",
309 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId, Desc->CodecIds.VenId, Desc->CodecIds.DevId);
310 if (!NT_SUCCESS(status)) {
311 return status;
312 }
313
314 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
315 if (!NT_SUCCESS(status)) {
316 return status;
317 }
318
319 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&VEN_%04X&DEV_%04X",
320 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.VenId, Desc->CodecIds.DevId);
321 if (!NT_SUCCESS(status)) {
322 return status;
323 }
324
325 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
326 if (!NT_SUCCESS(status)) {
327 return status;
328 }
329
330 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&VEN_%04X&DEV_%04X",
331 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId, Desc->CodecIds.DevId);
332 if (!NT_SUCCESS(status)) {
333 return status;
334 }
335
336 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
337 if (!NT_SUCCESS(status)) {
338 return status;
339 }
340
341 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&CTLR_DEV_%02X&VEN_%04X",
342 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId, Desc->CodecIds.VenId);
343 if (!NT_SUCCESS(status)) {
344 return status;
345 }
346
347 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
348 if (!NT_SUCCESS(status)) {
349 return status;
350 }
351
352 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&VEN_%04X",
353 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.VenId);
354 if (!NT_SUCCESS(status)) {
355 return status;
356 }
357
358 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
359 if (!NT_SUCCESS(status)) {
360 return status;
361 }
362
363 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&VEN_%04X",
364 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId);
365 if (!NT_SUCCESS(status)) {
366 return status;
367 }
368
369 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
370 if (!NT_SUCCESS(status)) {
371 return status;
372 }
373
374 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&CTLR_DEV_%02X",
375 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId);
376 if (!NT_SUCCESS(status)) {
377 return status;
378 }
379
380 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
381 if (!NT_SUCCESS(status)) {
382 return status;
383 }
384
385 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X",
386 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId);
387 if (!NT_SUCCESS(status)) {
388 return status;
389 }
390
391 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
392 if (!NT_SUCCESS(status)) {
393 return status;
394 }
395
396 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X",
397 prefix, funcPrefix, Desc->CodecIds.FuncId);
398 if (!NT_SUCCESS(status)) {
399 return status;
400 }
401
402 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
403 if (!NT_SUCCESS(status)) {
404 return status;
405 }
406 }
407 }
408
409 status = RtlUnicodeStringPrintf(&buffer, L"%02d", Desc->CodecIds.CodecAddress);
410 if (!NT_SUCCESS(status)) {
411 return status;
412 }
413
414 status = WdfPdoInitAssignInstanceID(DeviceInit, &buffer);
415 if (!NT_SUCCESS(status)) {
416 return status;
417 }
418
419 //
420 // Provide a description about the device. This text is usually read from
421 // the device. In the case of USB device, this text comes from the string
422 // descriptor. This text is displayed momentarily by the PnP manager while
423 // it's looking for a matching INF. If it finds one, it uses the Device
424 // Description from the INF file or the friendly name created by
425 // coinstallers to display in the device manager. FriendlyName takes
426 // precedence over the DeviceDesc from the INF file.
427 //
428 if (Desc->CodecIds.IsDSP) {
430 L"Intel Audio DSP");
431 }
432 else {
434 L"High Definition Audio Device");
435 }
436 if (!NT_SUCCESS(status)) {
437 return status;
438 }
439
440 //
441 // You can call WdfPdoInitAddDeviceText multiple times, adding device
442 // text for multiple locales. When the system displays the text, it
443 // chooses the text that matches the current locale, if available.
444 // Otherwise it will use the string for the default locale.
445 // The driver can specify the driver's default locale by calling
446 // WdfPdoInitSetDefaultLocale.
447 //
448 status = WdfPdoInitAddDeviceText(DeviceInit,
449 &buffer,
450 &deviceLocation,
452 if (!NT_SUCCESS(status)) {
453 return status;
454 }
455
456 WdfPdoInitSetDefaultLocale(DeviceInit, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
457
458 //
459 // Initialize the attributes to specify the size of PDO device extension.
460 // All the state information private to the PDO will be tracked here.
461 //
463
464 status = WdfDeviceCreate(&DeviceInit, &pdoAttributes, &hChild);
465 if (!NT_SUCCESS(status)) {
466 return status;
467 }
468
469 //
470 // Get the device context.
471 //
472 pdoData = PdoGetData(hChild);
473
474 pdoData->FdoContext = Desc->FdoContext;
475 RtlCopyMemory(&pdoData->CodecIds, &Desc->CodecIds, sizeof(Desc->CodecIds));
476
477 if (!Desc->CodecIds.IsDSP)
478 Desc->FdoContext->codecs[Desc->CodecIds.CodecAddress] = pdoData;
479
480 //
481 // Set some properties for the child device.
482 //
484 pnpCaps.Removable = WdfFalse;
485 pnpCaps.EjectSupported = Desc->CodecIds.IsGraphicsCodec ? WdfTrue : WdfFalse;
486 pnpCaps.SurpriseRemovalOK = Desc->CodecIds.IsGraphicsCodec ? WdfTrue : WdfFalse;
487
488 pnpCaps.Address = Desc->CodecIds.CodecAddress;
489 pnpCaps.UINumber = Desc->CodecIds.CodecAddress;
490
491 WdfDeviceSetPnpCapabilities(hChild, &pnpCaps);
492
494
495 powerCaps.DeviceD1 = WdfTrue;
496 powerCaps.WakeFromD1 = WdfTrue;
497 powerCaps.DeviceWake = PowerDeviceD1;
498
505
506 WdfDeviceSetPowerCapabilities(hChild, &powerCaps);
507
508 if (Desc->CodecIds.IsDSP) {
509 ADSP_BUS_INTERFACE busInterface = ADSP_BusInterface(pdoData);
511 (PINTERFACE)&busInterface,
512 &GUID_ADSP_BUS_INTERFACE,
513 NULL);
514 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
515 }
516 else {
517 HDAUDIO_BUS_INTERFACE busInterface = HDA_BusInterface(pdoData);
518
520 (PINTERFACE)&busInterface,
521 &GUID_HDAUDIO_BUS_INTERFACE,
522 NULL);
523
524 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
525 if (!NT_SUCCESS(status)) {
526 return status;
527 }
528
529 HDAUDIO_BUS_INTERFACE_BDL busInterfaceBDL = HDA_BusInterfaceBDL(pdoData);
531 (PINTERFACE)&busInterfaceBDL,
532 &GUID_HDAUDIO_BUS_INTERFACE_BDL,
533 NULL);
534 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
535 if (!NT_SUCCESS(status)) {
536 return status;
537 }
538
539 HDAUDIO_BUS_INTERFACE_V2 busInterface2 = HDA_BusInterfaceV2(pdoData);
541 (PINTERFACE)&busInterface2,
542 &GUID_HDAUDIO_BUS_INTERFACE_V2,
543 NULL);
544 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
545 if (!NT_SUCCESS(status)) {
546 return status;
547 }
548
549 HDAUDIO_BUS_INTERFACE_V3 busInterface3 = HDA_BusInterfaceV3(pdoData);
551 (PINTERFACE)&busInterface3,
552 &GUID_HDAUDIO_BUS_INTERFACE_V3,
553 NULL);
554 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
555 if (!NT_SUCCESS(status)) {
556 return status;
557 }
558 }
559
560 return status;
561}
#define PAGED_CODE()
unsigned char BOOLEAN
Definition: actypes.h:127
ADSP_BUS_INTERFACE ADSP_BusInterface(PVOID Context)
Definition: adsp.cpp:369
LONG NTSTATUS
Definition: precomp.h:26
#define DECLARE_UNICODE_STRING_SIZE(_var, _size)
Definition: reactos.c:2885
BOOLEAN NTAPI Bus_EvtChildListIdentificationDescriptionCompare(WDFCHILDLIST DeviceList, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER FirstIdentificationDescription, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SecondIdentificationDescription)
Definition: buspdo.cpp:60
VOID NTAPI Bus_EvtChildListIdentificationDescriptionCleanup(_In_ WDFCHILDLIST DeviceList, _Inout_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription)
Definition: buspdo.cpp:100
NTSTATUS NTAPI Bus_EvtDeviceListCreatePdo(WDFCHILDLIST DeviceList, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription, PWDFDEVICE_INIT ChildInit)
Definition: buspdo.cpp:121
NTSTATUS Bus_CreatePdo(_In_ WDFDEVICE Device, _In_ PWDFDEVICE_INIT DeviceInit, _In_ PPDO_IDENTIFICATION_DESCRIPTION Desc)
Definition: buspdo.cpp:157
NTSTATUS NTAPI Bus_EvtChildListIdentificationDescriptionDuplicate(WDFCHILDLIST DeviceList, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription)
Definition: buspdo.cpp:13
#define MAX_INSTANCE_ID_LEN
Definition: buspdo.h:4
Definition: Header.h:9
#define NULL
Definition: types.h:112
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
PDEVICE_LIST DeviceList
Definition: utils.c:27
#define L(x)
Definition: resources.c:13
HDAUDIO_BUS_INTERFACE_BDL HDA_BusInterfaceBDL(PVOID Context)
Definition: hdaudio.cpp:1146
HDAUDIO_BUS_INTERFACE HDA_BusInterface(PVOID Context)
Definition: hdaudio.cpp:1119
HDAUDIO_BUS_INTERFACE_V2 HDA_BusInterfaceV2(PVOID Context)
Definition: hdaudio.cpp:1055
#define SklHdAudBusPrint(dbglevel, fmt,...)
Definition: driver.h:111
HDAUDIO_BUS_INTERFACE_V3 HDA_BusInterfaceV3(PVOID Context)
Definition: hdaudio.cpp:1086
#define RtlCompareMemory(s1, s2, l)
Definition: env_spec_w32.h:465
GLenum src
Definition: glext.h:6340
GLuint buffer
Definition: glext.h:5915
GLenum GLenum dst
Definition: glext.h:6340
static HTREEITEM hChild
Definition: treeview.c:383
#define _Inout_
Definition: no_sal2.h:162
#define _In_
Definition: no_sal2.h:158
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
@ PowerSystemSleeping1
Definition: ntpoapi.h:37
@ PowerSystemSleeping2
Definition: ntpoapi.h:38
@ PowerSystemSleeping3
Definition: ntpoapi.h:39
@ PowerSystemShutdown
Definition: ntpoapi.h:41
@ PowerSystemWorking
Definition: ntpoapi.h:36
@ PowerSystemHibernate
Definition: ntpoapi.h:40
@ PowerDeviceD1
Definition: ntpoapi.h:50
@ PowerDeviceD2
Definition: ntpoapi.h:51
@ PowerDeviceD3
Definition: ntpoapi.h:52
NTSTRSAFEVAPI RtlUnicodeStringPrintf(_In_ PUNICODE_STRING DestinationString, _In_ NTSTRSAFE_PCWSTR pszFormat,...)
Definition: ntstrsafe.h:3241
#define FILE_DEVICE_BUS_EXTENDER
Definition: winioctl.h:87
#define FILE_DEVICE_SOUND
Definition: winioctl.h:74
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_ENGLISH
Definition: nls.h:52
#define SUBLANG_ENGLISH_US
Definition: nls.h:222
#define STATUS_SUCCESS
Definition: shellext.h:65
PFDO_CONTEXT FdoContext
Definition: buspdo.h:49
CODEC_IDS CodecIds
Definition: buspdo.h:51
WDF_TRI_STATE EjectSupported
Definition: wdfdevice.h:1526
WDF_TRI_STATE SurpriseRemovalOK
Definition: wdfdevice.h:1531
DEVICE_POWER_STATE DeviceWake
Definition: wdfdevice.h:1590
DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]
Definition: wdfdevice.h:1584
Definition: ps.c:97
Character const *const prefix
Definition: tempnam.cpp:195
#define NTAPI
Definition: typedefs.h:36
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint16_t * PWCHAR
Definition: typedefs.h:56
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription
Definition: wdfchildlist.h:154
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER _In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SecondIdentificationDescription
Definition: wdfchildlist.h:191
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
Definition: wdfchildlist.h:124
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER _Out_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription
Definition: wdfchildlist.h:157
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER FirstIdentificationDescription
Definition: wdfchildlist.h:188
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER _In_ PWDFDEVICE_INIT ChildInit
Definition: wdfchildlist.h:127
_In_ PWDFDEVICE_INIT DeviceInit
Definition: wdfcontrol.h:113
#define DECLARE_CONST_UNICODE_STRING(_variablename, _string)
Definition: wdfcore.h:161
FORCEINLINE VOID WDF_DEVICE_PNP_CAPABILITIES_INIT(_Out_ PWDF_DEVICE_PNP_CAPABILITIES Caps)
Definition: wdfdevice.h:1545
FORCEINLINE VOID WDF_DEVICE_POWER_CAPABILITIES_INIT(_Out_ PWDF_DEVICE_POWER_CAPABILITIES Caps)
Definition: wdfdevice.h:1612
#define WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(_attributes, _contexttype)
Definition: wdfobject.h:170
FORCEINLINE VOID WDF_QUERY_INTERFACE_CONFIG_INIT(_Out_ PWDF_QUERY_INTERFACE_CONFIG InterfaceConfig, _In_opt_ PINTERFACE Interface, _In_ CONST GUID *InterfaceType, _In_opt_ PFN_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtDeviceProcessQueryInterfaceRequest)
@ WdfTrue
Definition: wdftypes.h:88
@ WdfFalse
Definition: wdftypes.h:87