[NTDDK]
[reactos.git] / include / ddk / ntddk.h
1 /*
2 * ntddk.h
3 *
4 * Windows Device Driver Kit
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 * DEFINES:
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
25 */
26
27 #ifndef _NTDDK_
28 #define _NTDDK_
29
30 #if !defined(_NTHAL_) && !defined(_NTIFS_)
31 #define _NTDDK_INCLUDED_
32 #define _DDK_DRIVER_
33 #endif
34
35 /* Dependencies */
36
37 #define NT_INCLUDED
38 #define _CTYPE_DISABLE_MACROS
39
40 #include <wdm.h>
41 #include <excpt.h>
42 #include <ntdef.h>
43 #include <ntstatus.h>
44
45 /* FIXME
46 #include <bugcodes.h>
47 #include <ntiologc.h>
48 */
49
50 #include <stdarg.h> // FIXME
51 #include <basetyps.h> // FIXME
52
53
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57
58 //
59 // GUID and UUID
60 //
61 #ifndef GUID_DEFINED
62 #include <guiddef.h>
63 #endif
64 typedef GUID UUID;
65
66 typedef struct _BUS_HANDLER *PBUS_HANDLER;
67
68 #define KERNEL_STACK_SIZE 12288
69 #define KERNEL_LARGE_STACK_SIZE 61440
70 #define KERNEL_LARGE_STACK_COMMIT 12288
71
72 #define EXCEPTION_READ_FAULT 0
73 #define EXCEPTION_WRITE_FAULT 1
74 #define EXCEPTION_EXECUTE_FAULT 8
75
76 #if (NTDDI_VERSION >= NTDDI_VISTA)
77 extern NTSYSAPI volatile CCHAR KeNumberProcessors;
78 #elif (NTDDI_VERSION >= NTDDI_WINXP)
79 extern NTSYSAPI CCHAR KeNumberProcessors;
80 #else
81 extern PCCHAR KeNumberProcessors;
82 #endif
83
84 #define MAX_WOW64_SHARED_ENTRIES 16
85
86 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
87 #define NX_SUPPORT_POLICY_ALWAYSON 1
88 #define NX_SUPPORT_POLICY_OPTIN 2
89 #define NX_SUPPORT_POLICY_OPTOUT 3
90
91 /*
92 ** IRP function codes
93 */
94
95 #define IRP_MN_QUERY_DIRECTORY 0x01
96 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
97
98 #define IRP_MN_USER_FS_REQUEST 0x00
99 #define IRP_MN_MOUNT_VOLUME 0x01
100 #define IRP_MN_VERIFY_VOLUME 0x02
101 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
102 #define IRP_MN_TRACK_LINK 0x04
103 #define IRP_MN_KERNEL_CALL 0x04
104
105 #define IRP_MN_LOCK 0x01
106 #define IRP_MN_UNLOCK_SINGLE 0x02
107 #define IRP_MN_UNLOCK_ALL 0x03
108 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
109
110 #define IRP_MN_FLUSH_AND_PURGE 0x01
111
112 #define IRP_MN_NORMAL 0x00
113 #define IRP_MN_DPC 0x01
114 #define IRP_MN_MDL 0x02
115 #define IRP_MN_COMPLETE 0x04
116 #define IRP_MN_COMPRESSED 0x08
117
118 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
119 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
120 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
121
122 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
123
124 typedef struct _IO_COUNTERS {
125 ULONGLONG ReadOperationCount;
126 ULONGLONG WriteOperationCount;
127 ULONGLONG OtherOperationCount;
128 ULONGLONG ReadTransferCount;
129 ULONGLONG WriteTransferCount;
130 ULONGLONG OtherTransferCount;
131 } IO_COUNTERS, *PIO_COUNTERS;
132
133 typedef struct _VM_COUNTERS {
134 SIZE_T PeakVirtualSize;
135 SIZE_T VirtualSize;
136 ULONG PageFaultCount;
137 SIZE_T PeakWorkingSetSize;
138 SIZE_T WorkingSetSize;
139 SIZE_T QuotaPeakPagedPoolUsage;
140 SIZE_T QuotaPagedPoolUsage;
141 SIZE_T QuotaPeakNonPagedPoolUsage;
142 SIZE_T QuotaNonPagedPoolUsage;
143 SIZE_T PagefileUsage;
144 SIZE_T PeakPagefileUsage;
145 } VM_COUNTERS, *PVM_COUNTERS;
146
147 typedef struct _VM_COUNTERS_EX
148 {
149 SIZE_T PeakVirtualSize;
150 SIZE_T VirtualSize;
151 ULONG PageFaultCount;
152 SIZE_T PeakWorkingSetSize;
153 SIZE_T WorkingSetSize;
154 SIZE_T QuotaPeakPagedPoolUsage;
155 SIZE_T QuotaPagedPoolUsage;
156 SIZE_T QuotaPeakNonPagedPoolUsage;
157 SIZE_T QuotaNonPagedPoolUsage;
158 SIZE_T PagefileUsage;
159 SIZE_T PeakPagefileUsage;
160 SIZE_T PrivateUsage;
161 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
162
163 typedef struct _POOLED_USAGE_AND_LIMITS
164 {
165 SIZE_T PeakPagedPoolUsage;
166 SIZE_T PagedPoolUsage;
167 SIZE_T PagedPoolLimit;
168 SIZE_T PeakNonPagedPoolUsage;
169 SIZE_T NonPagedPoolUsage;
170 SIZE_T NonPagedPoolLimit;
171 SIZE_T PeakPagefileUsage;
172 SIZE_T PagefileUsage;
173 SIZE_T PagefileLimit;
174 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
175
176 /* DEVICE_OBJECT.Flags */
177
178 #define DO_VERIFY_VOLUME 0x00000002
179 #define DO_BUFFERED_IO 0x00000004
180 #define DO_EXCLUSIVE 0x00000008
181 #define DO_DIRECT_IO 0x00000010
182 #define DO_MAP_IO_BUFFER 0x00000020
183 #define DO_DEVICE_HAS_NAME 0x00000040
184 #define DO_DEVICE_INITIALIZING 0x00000080
185 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
186 #define DO_LONG_TERM_REQUESTS 0x00000200
187 #define DO_NEVER_LAST_DEVICE 0x00000400
188 #define DO_SHUTDOWN_REGISTERED 0x00000800
189 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
190 #define DO_POWER_PAGABLE 0x00002000
191 #define DO_POWER_INRUSH 0x00004000
192 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
193 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
194 #define DO_FORCE_NEITHER_IO 0x00080000
195 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
196 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
197 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
198 #define DO_DISALLOW_EXECUTE 0x00800000
199
200 #define DRVO_REINIT_REGISTERED 0x00000008
201 #define DRVO_INITIALIZED 0x00000010
202 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
203 #define DRVO_LEGACY_RESOURCES 0x00000040
204
205 typedef enum _ARBITER_REQUEST_SOURCE {
206 ArbiterRequestUndefined = -1,
207 ArbiterRequestLegacyReported,
208 ArbiterRequestHalReported,
209 ArbiterRequestLegacyAssigned,
210 ArbiterRequestPnpDetected,
211 ArbiterRequestPnpEnumerated
212 } ARBITER_REQUEST_SOURCE;
213
214 typedef enum _ARBITER_RESULT {
215 ArbiterResultUndefined = -1,
216 ArbiterResultSuccess,
217 ArbiterResultExternalConflict,
218 ArbiterResultNullRequest
219 } ARBITER_RESULT;
220
221 typedef enum _ARBITER_ACTION {
222 ArbiterActionTestAllocation,
223 ArbiterActionRetestAllocation,
224 ArbiterActionCommitAllocation,
225 ArbiterActionRollbackAllocation,
226 ArbiterActionQueryAllocatedResources,
227 ArbiterActionWriteReservedResources,
228 ArbiterActionQueryConflict,
229 ArbiterActionQueryArbitrate,
230 ArbiterActionAddReserved,
231 ArbiterActionBootAllocation
232 } ARBITER_ACTION, *PARBITER_ACTION;
233
234 typedef struct _ARBITER_CONFLICT_INFO {
235 PDEVICE_OBJECT OwningObject;
236 ULONGLONG Start;
237 ULONGLONG End;
238 } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
239
240 typedef struct _ARBITER_PARAMETERS {
241 union {
242 struct {
243 IN OUT PLIST_ENTRY ArbitrationList;
244 IN ULONG AllocateFromCount;
245 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
246 } TestAllocation;
247 struct {
248 IN OUT PLIST_ENTRY ArbitrationList;
249 IN ULONG AllocateFromCount;
250 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
251 } RetestAllocation;
252 struct {
253 IN OUT PLIST_ENTRY ArbitrationList;
254 } BootAllocation;
255 struct {
256 OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
257 } QueryAllocatedResources;
258 struct {
259 IN PDEVICE_OBJECT PhysicalDeviceObject;
260 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource;
261 OUT PULONG ConflictCount;
262 OUT PARBITER_CONFLICT_INFO *Conflicts;
263 } QueryConflict;
264 struct {
265 IN PLIST_ENTRY ArbitrationList;
266 } QueryArbitrate;
267 struct {
268 IN PDEVICE_OBJECT ReserveDevice;
269 } AddReserved;
270 } Parameters;
271 } ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
272
273 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
274
275 typedef struct _ARBITER_LIST_ENTRY {
276 LIST_ENTRY ListEntry;
277 ULONG AlternativeCount;
278 PIO_RESOURCE_DESCRIPTOR Alternatives;
279 PDEVICE_OBJECT PhysicalDeviceObject;
280 ARBITER_REQUEST_SOURCE RequestSource;
281 ULONG Flags;
282 LONG_PTR WorkSpace;
283 INTERFACE_TYPE InterfaceType;
284 ULONG SlotNumber;
285 ULONG BusNumber;
286 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
287 PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
288 ARBITER_RESULT Result;
289 } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
290
291 typedef NTSTATUS
292 (DDKAPI *PARBITER_HANDLER)(
293 IN OUT PVOID Context,
294 IN ARBITER_ACTION Action,
295 IN OUT PARBITER_PARAMETERS Parameters);
296
297 #define ARBITER_PARTIAL 0x00000001
298
299 typedef struct _ARBITER_INTERFACE {
300 USHORT Size;
301 USHORT Version;
302 PVOID Context;
303 PINTERFACE_REFERENCE InterfaceReference;
304 PINTERFACE_DEREFERENCE InterfaceDereference;
305 PARBITER_HANDLER ArbiterHandler;
306 ULONG Flags;
307 } ARBITER_INTERFACE, *PARBITER_INTERFACE;
308
309 typedef enum _HAL_QUERY_INFORMATION_CLASS {
310 HalInstalledBusInformation,
311 HalProfileSourceInformation,
312 HalInformationClassUnused1,
313 HalPowerInformation,
314 HalProcessorSpeedInformation,
315 HalCallbackInformation,
316 HalMapRegisterInformation,
317 HalMcaLogInformation,
318 HalFrameBufferCachingInformation,
319 HalDisplayBiosInformation,
320 HalProcessorFeatureInformation,
321 HalNumaTopologyInterface,
322 HalErrorInformation,
323 HalCmcLogInformation,
324 HalCpeLogInformation,
325 HalQueryMcaInterface,
326 HalQueryAMLIIllegalIOPortAddresses,
327 HalQueryMaxHotPlugMemoryAddress,
328 HalPartitionIpiInterface,
329 HalPlatformInformation,
330 HalQueryProfileSourceList,
331 HalInitLogInformation,
332 HalFrequencyInformation,
333 HalProcessorBrandString,
334 HalHypervisorInformation,
335 HalPlatformTimerInformation,
336 HalAcpiAuditInformation
337 } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
338
339 typedef enum _HAL_SET_INFORMATION_CLASS {
340 HalProfileSourceInterval,
341 HalProfileSourceInterruptHandler,
342 HalMcaRegisterDriver,
343 HalKernelErrorHandler,
344 HalCmcRegisterDriver,
345 HalCpeRegisterDriver,
346 HalMcaLog,
347 HalCmcLog,
348 HalCpeLog,
349 HalGenerateCmcInterrupt,
350 HalProfileSourceTimerHandler,
351 HalEnlightenment,
352 HalProfileDpgoSourceInterruptHandler
353 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
354
355 typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
356 KPROFILE_SOURCE Source;
357 ULONG_PTR Interval;
358 } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
359
360 typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
361 KPROFILE_SOURCE Source;
362 BOOLEAN Supported;
363 ULONG Interval;
364 } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
365
366 typedef struct _MAP_REGISTER_ENTRY {
367 PVOID MapRegister;
368 BOOLEAN WriteToDevice;
369 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
370
371 typedef struct _DEBUG_DEVICE_ADDRESS {
372 UCHAR Type;
373 BOOLEAN Valid;
374 UCHAR Reserved[2];
375 PUCHAR TranslatedAddress;
376 ULONG Length;
377 } DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
378
379 typedef struct _DEBUG_MEMORY_REQUIREMENTS {
380 PHYSICAL_ADDRESS Start;
381 PHYSICAL_ADDRESS MaxEnd;
382 PVOID VirtualAddress;
383 ULONG Length;
384 BOOLEAN Cached;
385 BOOLEAN Aligned;
386 } DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
387
388 typedef struct _DEBUG_DEVICE_DESCRIPTOR {
389 ULONG Bus;
390 ULONG Slot;
391 USHORT Segment;
392 USHORT VendorID;
393 USHORT DeviceID;
394 UCHAR BaseClass;
395 UCHAR SubClass;
396 UCHAR ProgIf;
397 BOOLEAN Initialized;
398 BOOLEAN Configured;
399 DEBUG_DEVICE_ADDRESS BaseAddress[6];
400 DEBUG_MEMORY_REQUIREMENTS Memory;
401 } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
402
403 typedef struct _PM_DISPATCH_TABLE {
404 ULONG Signature;
405 ULONG Version;
406 PVOID Function[1];
407 } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
408
409 typedef enum _RESOURCE_TRANSLATION_DIRECTION {
410 TranslateChildToParent,
411 TranslateParentToChild
412 } RESOURCE_TRANSLATION_DIRECTION;
413
414 typedef NTSTATUS
415 (DDKAPI *PTRANSLATE_RESOURCE_HANDLER)(
416 IN OUT PVOID Context,
417 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
418 IN RESOURCE_TRANSLATION_DIRECTION Direction,
419 IN ULONG AlternativesCount OPTIONAL,
420 IN IO_RESOURCE_DESCRIPTOR Alternatives[],
421 IN PDEVICE_OBJECT PhysicalDeviceObject,
422 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
423
424 typedef NTSTATUS
425 (DDKAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
426 IN PVOID Context OPTIONAL,
427 IN PIO_RESOURCE_DESCRIPTOR Source,
428 IN PDEVICE_OBJECT PhysicalDeviceObject,
429 OUT PULONG TargetCount,
430 OUT PIO_RESOURCE_DESCRIPTOR *Target);
431
432 typedef struct _TRANSLATOR_INTERFACE {
433 USHORT Size;
434 USHORT Version;
435 PVOID Context;
436 PINTERFACE_REFERENCE InterfaceReference;
437 PINTERFACE_DEREFERENCE InterfaceDereference;
438 PTRANSLATE_RESOURCE_HANDLER TranslateResources;
439 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
440 } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
441
442 typedef VOID
443 (FASTCALL *pHalExamineMBR)(
444 IN PDEVICE_OBJECT DeviceObject,
445 IN ULONG SectorSize,
446 IN ULONG MBRTypeIdentifier,
447 OUT PVOID *Buffer);
448
449 typedef NTSTATUS
450 (FASTCALL *pHalIoReadPartitionTable)(
451 IN PDEVICE_OBJECT DeviceObject,
452 IN ULONG SectorSize,
453 IN BOOLEAN ReturnRecognizedPartitions,
454 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
455
456 typedef NTSTATUS
457 (FASTCALL *pHalIoSetPartitionInformation)(
458 IN PDEVICE_OBJECT DeviceObject,
459 IN ULONG SectorSize,
460 IN ULONG PartitionNumber,
461 IN ULONG PartitionType);
462
463 typedef NTSTATUS
464 (FASTCALL *pHalIoWritePartitionTable)(
465 IN PDEVICE_OBJECT DeviceObject,
466 IN ULONG SectorSize,
467 IN ULONG SectorsPerTrack,
468 IN ULONG NumberOfHeads,
469 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
470
471 typedef PBUS_HANDLER
472 (FASTCALL *pHalHandlerForBus)(
473 IN INTERFACE_TYPE InterfaceType,
474 IN ULONG BusNumber);
475
476 typedef VOID
477 (FASTCALL *pHalReferenceBusHandler)(
478 IN PBUS_HANDLER BusHandler);
479
480 typedef NTSTATUS
481 (DDKAPI *pHalQuerySystemInformation)(
482 IN HAL_QUERY_INFORMATION_CLASS InformationClass,
483 IN ULONG BufferSize,
484 IN OUT PVOID Buffer,
485 OUT PULONG ReturnedLength);
486
487 typedef NTSTATUS
488 (DDKAPI *pHalSetSystemInformation)(
489 IN HAL_SET_INFORMATION_CLASS InformationClass,
490 IN ULONG BufferSize,
491 IN PVOID Buffer);
492
493 typedef NTSTATUS
494 (DDKAPI *pHalQueryBusSlots)(
495 IN PBUS_HANDLER BusHandler,
496 IN ULONG BufferSize,
497 OUT PULONG SlotNumbers,
498 OUT PULONG ReturnedLength);
499
500 typedef NTSTATUS
501 (DDKAPI *pHalInitPnpDriver)(
502 VOID);
503
504 typedef NTSTATUS
505 (DDKAPI *pHalInitPowerManagement)(
506 IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
507 OUT PPM_DISPATCH_TABLE *PmHalDispatchTable);
508
509 typedef struct _DMA_ADAPTER*
510 (DDKAPI *pHalGetDmaAdapter)(
511 IN PVOID Context,
512 IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
513 OUT PULONG NumberOfMapRegisters);
514
515 typedef NTSTATUS
516 (DDKAPI *pHalGetInterruptTranslator)(
517 IN INTERFACE_TYPE ParentInterfaceType,
518 IN ULONG ParentBusNumber,
519 IN INTERFACE_TYPE BridgeInterfaceType,
520 IN USHORT Size,
521 IN USHORT Version,
522 OUT PTRANSLATOR_INTERFACE Translator,
523 OUT PULONG BridgeBusNumber);
524
525 typedef NTSTATUS
526 (DDKAPI *pHalStartMirroring)(
527 VOID);
528
529 typedef NTSTATUS
530 (DDKAPI *pHalEndMirroring)(
531 IN ULONG PassNumber);
532
533 typedef NTSTATUS
534 (DDKAPI *pHalMirrorPhysicalMemory)(
535 IN PHYSICAL_ADDRESS PhysicalAddress,
536 IN LARGE_INTEGER NumberOfBytes);
537
538 typedef NTSTATUS
539 (DDKAPI *pHalMirrorVerify)(
540 IN PHYSICAL_ADDRESS PhysicalAddress,
541 IN LARGE_INTEGER NumberOfBytes);
542
543 typedef VOID
544 (DDKAPI *pHalEndOfBoot)(
545 VOID);
546
547 typedef
548 BOOLEAN
549 (DDKAPI *pHalTranslateBusAddress)(
550 IN INTERFACE_TYPE InterfaceType,
551 IN ULONG BusNumber,
552 IN PHYSICAL_ADDRESS BusAddress,
553 IN OUT PULONG AddressSpace,
554 OUT PPHYSICAL_ADDRESS TranslatedAddress);
555
556 typedef
557 NTSTATUS
558 (DDKAPI *pHalAssignSlotResources)(
559 IN PUNICODE_STRING RegistryPath,
560 IN PUNICODE_STRING DriverClassName OPTIONAL,
561 IN PDRIVER_OBJECT DriverObject,
562 IN PDEVICE_OBJECT DeviceObject,
563 IN INTERFACE_TYPE BusType,
564 IN ULONG BusNumber,
565 IN ULONG SlotNumber,
566 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
567
568 typedef
569 VOID
570 (DDKAPI *pHalHaltSystem)(
571 VOID);
572
573 typedef
574 BOOLEAN
575 (DDKAPI *pHalResetDisplay)(
576 VOID);
577
578 typedef
579 UCHAR
580 (DDKAPI *pHalVectorToIDTEntry)(
581 ULONG Vector);
582
583 typedef
584 BOOLEAN
585 (DDKAPI *pHalFindBusAddressTranslation)(
586 IN PHYSICAL_ADDRESS BusAddress,
587 IN OUT PULONG AddressSpace,
588 OUT PPHYSICAL_ADDRESS TranslatedAddress,
589 IN OUT PULONG_PTR Context,
590 IN BOOLEAN NextBus);
591
592 typedef
593 NTSTATUS
594 (DDKAPI *pKdSetupPciDeviceForDebugging)(
595 IN PVOID LoaderBlock OPTIONAL,
596 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
597
598 typedef
599 NTSTATUS
600 (DDKAPI *pKdReleasePciDeviceForDebugging)(
601 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
602
603 typedef
604 PVOID
605 (DDKAPI *pKdGetAcpiTablePhase0)(
606 IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
607 IN ULONG Signature);
608
609 typedef
610 VOID
611 (DDKAPI *pKdCheckPowerButton)(
612 VOID);
613
614 #ifdef _X86_
615
616 #define SIZE_OF_80387_REGISTERS 80
617
618 typedef struct _FLOATING_SAVE_AREA {
619 ULONG ControlWord;
620 ULONG StatusWord;
621 ULONG TagWord;
622 ULONG ErrorOffset;
623 ULONG ErrorSelector;
624 ULONG DataOffset;
625 ULONG DataSelector;
626 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
627 ULONG Cr0NpxState;
628 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
629
630 #include "pshpack4.h"
631 typedef struct _CONTEXT {
632 ULONG ContextFlags;
633 ULONG Dr0;
634 ULONG Dr1;
635 ULONG Dr2;
636 ULONG Dr3;
637 ULONG Dr6;
638 ULONG Dr7;
639 FLOATING_SAVE_AREA FloatSave;
640 ULONG SegGs;
641 ULONG SegFs;
642 ULONG SegEs;
643 ULONG SegDs;
644 ULONG Edi;
645 ULONG Esi;
646 ULONG Ebx;
647 ULONG Edx;
648 ULONG Ecx;
649 ULONG Eax;
650 ULONG Ebp;
651 ULONG Eip;
652 ULONG SegCs;
653 ULONG EFlags;
654 ULONG Esp;
655 ULONG SegSs;
656 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
657 } CONTEXT;
658 #include "poppack.h"
659
660 #endif /* _X86_ */
661
662 #ifdef _AMD64_
663
664 #if !defined(RC_INVOKED)
665
666 #define CONTEXT_AMD64 0x100000
667
668 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
669 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
670 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
671 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
672 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
673
674 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
675 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
676
677 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
678
679 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
680 #define CONTEXT_SERVICE_ACTIVE 0x10000000
681 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
682 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
683
684 #endif /* RC_INVOKED */
685
686 #endif /* _AMD64_ */
687
688 typedef enum _INTERLOCKED_RESULT {
689 ResultNegative = RESULT_NEGATIVE,
690 ResultZero = RESULT_ZERO,
691 ResultPositive = RESULT_POSITIVE
692 } INTERLOCKED_RESULT;
693
694 typedef struct _OSVERSIONINFOA {
695 ULONG dwOSVersionInfoSize;
696 ULONG dwMajorVersion;
697 ULONG dwMinorVersion;
698 ULONG dwBuildNumber;
699 ULONG dwPlatformId;
700 CHAR szCSDVersion[128];
701 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
702
703 typedef struct _OSVERSIONINFOW {
704 ULONG dwOSVersionInfoSize;
705 ULONG dwMajorVersion;
706 ULONG dwMinorVersion;
707 ULONG dwBuildNumber;
708 ULONG dwPlatformId;
709 WCHAR szCSDVersion[128];
710 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
711
712 typedef struct _OSVERSIONINFOEXA {
713 ULONG dwOSVersionInfoSize;
714 ULONG dwMajorVersion;
715 ULONG dwMinorVersion;
716 ULONG dwBuildNumber;
717 ULONG dwPlatformId;
718 CHAR szCSDVersion[128];
719 USHORT wServicePackMajor;
720 USHORT wServicePackMinor;
721 USHORT wSuiteMask;
722 UCHAR wProductType;
723 UCHAR wReserved;
724 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
725
726 typedef struct _OSVERSIONINFOEXW {
727 ULONG dwOSVersionInfoSize;
728 ULONG dwMajorVersion;
729 ULONG dwMinorVersion;
730 ULONG dwBuildNumber;
731 ULONG dwPlatformId;
732 WCHAR szCSDVersion[128];
733 USHORT wServicePackMajor;
734 USHORT wServicePackMinor;
735 USHORT wSuiteMask;
736 UCHAR wProductType;
737 UCHAR wReserved;
738 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
739
740 #ifdef UNICODE
741 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
742 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
743 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
744 typedef OSVERSIONINFOW OSVERSIONINFO;
745 typedef POSVERSIONINFOW POSVERSIONINFO;
746 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
747 #else
748 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
749 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
750 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
751 typedef OSVERSIONINFOA OSVERSIONINFO;
752 typedef POSVERSIONINFOA POSVERSIONINFO;
753 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
754 #endif /* UNICODE */
755
756 /* Executive Types */
757
758 #define PROTECTED_POOL 0x80000000
759
760 typedef struct _ZONE_SEGMENT_HEADER {
761 SINGLE_LIST_ENTRY SegmentList;
762 PVOID Reserved;
763 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
764
765 typedef struct _ZONE_HEADER {
766 SINGLE_LIST_ENTRY FreeList;
767 SINGLE_LIST_ENTRY SegmentList;
768 ULONG BlockSize;
769 ULONG TotalSegmentSize;
770 } ZONE_HEADER, *PZONE_HEADER;
771
772 /* Executive Functions */
773
774 static __inline PVOID
775 ExAllocateFromZone(
776 IN PZONE_HEADER Zone)
777 {
778 if (Zone->FreeList.Next)
779 Zone->FreeList.Next = Zone->FreeList.Next->Next;
780 return (PVOID) Zone->FreeList.Next;
781 }
782
783 static __inline PVOID
784 ExFreeToZone(
785 IN PZONE_HEADER Zone,
786 IN PVOID Block)
787 {
788 ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
789 Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
790 return ((PSINGLE_LIST_ENTRY) Block)->Next;
791 }
792
793 /*
794 * PVOID
795 * ExInterlockedAllocateFromZone(
796 * IN PZONE_HEADER Zone,
797 * IN PKSPIN_LOCK Lock)
798 */
799 #define ExInterlockedAllocateFromZone(Zone, Lock) \
800 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
801
802 /* PVOID
803 * ExInterlockedFreeToZone(
804 * IN PZONE_HEADER Zone,
805 * IN PVOID Block,
806 * IN PKSPIN_LOCK Lock);
807 */
808 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
809 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
810
811 /*
812 * BOOLEAN
813 * ExIsFullZone(
814 * IN PZONE_HEADER Zone)
815 */
816 #define ExIsFullZone(Zone) \
817 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
818
819 /* BOOLEAN
820 * ExIsObjectInFirstZoneSegment(
821 * IN PZONE_HEADER Zone,
822 * IN PVOID Object);
823 */
824 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
825 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
826 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
827 (Zone)->TotalSegmentSize)) )
828
829 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
830 #define ExAcquireResourceShared ExAcquireResourceSharedLite
831 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
832 #define ExDeleteResource ExDeleteResourceLite
833 #define ExInitializeResource ExInitializeResourceLite
834 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
835 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
836 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
837 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
838
839 #if (NTDDI_VERSION >= NTDDI_WIN2K)
840
841 NTKERNELAPI
842 NTSTATUS
843 NTAPI
844 ExExtendZone(
845 IN OUT PZONE_HEADER Zone,
846 IN OUT PVOID Segment,
847 IN ULONG SegmentSize);
848
849 NTKERNELAPI
850 NTSTATUS
851 NTAPI
852 ExInitializeZone(
853 OUT PZONE_HEADER Zone,
854 IN ULONG BlockSize,
855 IN OUT PVOID InitialSegment,
856 IN ULONG InitialSegmentSize);
857
858 NTKERNELAPI
859 NTSTATUS
860 NTAPI
861 ExInterlockedExtendZone(
862 IN OUT PZONE_HEADER Zone,
863 IN OUT PVOID Segment,
864 IN ULONG SegmentSize,
865 IN OUT PKSPIN_LOCK Lock);
866
867 NTKERNELAPI
868 NTSTATUS
869 NTAPI
870 ExUuidCreate(
871 OUT UUID *Uuid);
872
873 NTKERNELAPI
874 DECLSPEC_NORETURN
875 VOID
876 NTAPI
877 ExRaiseAccessViolation(
878 VOID);
879
880 NTKERNELAPI
881 DECLSPEC_NORETURN
882 VOID
883 NTAPI
884 ExRaiseDatatypeMisalignment(
885 VOID);
886
887 #endif
888
889 #ifndef _ARC_DDK_
890 #define _ARC_DDK_
891 typedef enum _CONFIGURATION_TYPE {
892 ArcSystem,
893 CentralProcessor,
894 FloatingPointProcessor,
895 PrimaryIcache,
896 PrimaryDcache,
897 SecondaryIcache,
898 SecondaryDcache,
899 SecondaryCache,
900 EisaAdapter,
901 TcAdapter,
902 ScsiAdapter,
903 DtiAdapter,
904 MultiFunctionAdapter,
905 DiskController,
906 TapeController,
907 CdromController,
908 WormController,
909 SerialController,
910 NetworkController,
911 DisplayController,
912 ParallelController,
913 PointerController,
914 KeyboardController,
915 AudioController,
916 OtherController,
917 DiskPeripheral,
918 FloppyDiskPeripheral,
919 TapePeripheral,
920 ModemPeripheral,
921 MonitorPeripheral,
922 PrinterPeripheral,
923 PointerPeripheral,
924 KeyboardPeripheral,
925 TerminalPeripheral,
926 OtherPeripheral,
927 LinePeripheral,
928 NetworkPeripheral,
929 SystemMemory,
930 DockingInformation,
931 RealModeIrqRoutingTable,
932 RealModePCIEnumeration,
933 MaximumType
934 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
935 #endif /* !_ARC_DDK_ */
936
937 typedef struct _CONTROLLER_OBJECT {
938 CSHORT Type;
939 CSHORT Size;
940 PVOID ControllerExtension;
941 KDEVICE_QUEUE DeviceWaitQueue;
942 ULONG Spare1;
943 LARGE_INTEGER Spare2;
944 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
945
946 typedef struct _CONFIGURATION_INFORMATION {
947 ULONG DiskCount;
948 ULONG FloppyCount;
949 ULONG CdRomCount;
950 ULONG TapeCount;
951 ULONG ScsiPortCount;
952 ULONG SerialCount;
953 ULONG ParallelCount;
954 BOOLEAN AtDiskPrimaryAddressClaimed;
955 BOOLEAN AtDiskSecondaryAddressClaimed;
956 ULONG Version;
957 ULONG MediumChangerCount;
958 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
959
960 typedef
961 NTSTATUS
962 (DDKAPI *PIO_QUERY_DEVICE_ROUTINE)(
963 IN PVOID Context,
964 IN PUNICODE_STRING PathName,
965 IN INTERFACE_TYPE BusType,
966 IN ULONG BusNumber,
967 IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
968 IN CONFIGURATION_TYPE ControllerType,
969 IN ULONG ControllerNumber,
970 IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
971 IN CONFIGURATION_TYPE PeripheralType,
972 IN ULONG PeripheralNumber,
973 IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
974
975 typedef
976 VOID
977 (DDKAPI DRIVER_REINITIALIZE)(
978 IN struct _DRIVER_OBJECT *DriverObject,
979 IN PVOID Context,
980 IN ULONG Count);
981
982 typedef DRIVER_REINITIALIZE *PDRIVER_REINITIALIZE;
983
984 /** Filesystem runtime library routines **/
985
986 #if (NTDDI_VERSION >= NTDDI_WIN2K)
987 NTKERNELAPI
988 BOOLEAN
989 NTAPI
990 FsRtlIsTotalDeviceFailure(
991 IN NTSTATUS Status);
992 #endif
993
994 /* Hardware Abstraction Layer Types */
995
996 typedef VOID
997 (NTAPI *PciPin2Line)(
998 IN struct _BUS_HANDLER *BusHandler,
999 IN struct _BUS_HANDLER *RootHandler,
1000 IN PCI_SLOT_NUMBER SlotNumber,
1001 IN PPCI_COMMON_CONFIG PciData);
1002
1003 typedef VOID
1004 (NTAPI *PciLine2Pin)(
1005 IN struct _BUS_HANDLER *BusHandler,
1006 IN struct _BUS_HANDLER *RootHandler,
1007 IN PCI_SLOT_NUMBER SlotNumber,
1008 IN PPCI_COMMON_CONFIG PciNewData,
1009 IN PPCI_COMMON_CONFIG PciOldData);
1010
1011 typedef VOID
1012 (NTAPI *PciReadWriteConfig)(
1013 IN struct _BUS_HANDLER *BusHandler,
1014 IN PCI_SLOT_NUMBER Slot,
1015 IN PVOID Buffer,
1016 IN ULONG Offset,
1017 IN ULONG Length);
1018
1019 #define PCI_DATA_TAG ' ICP'
1020 #define PCI_DATA_VERSION 1
1021
1022 typedef struct _PCIBUSDATA {
1023 ULONG Tag;
1024 ULONG Version;
1025 PciReadWriteConfig ReadConfig;
1026 PciReadWriteConfig WriteConfig;
1027 PciPin2Line Pin2Line;
1028 PciLine2Pin Line2Pin;
1029 PCI_SLOT_NUMBER ParentSlot;
1030 PVOID Reserved[4];
1031 } PCIBUSDATA, *PPCIBUSDATA;
1032
1033 /* Hardware Abstraction Layer Functions */
1034
1035 #if !defined(NO_LEGACY_DRIVERS)
1036
1037 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1038
1039 NTHALAPI
1040 NTSTATUS
1041 NTAPI
1042 HalAssignSlotResources(
1043 IN PUNICODE_STRING RegistryPath,
1044 IN PUNICODE_STRING DriverClassName,
1045 IN PDRIVER_OBJECT DriverObject,
1046 IN PDEVICE_OBJECT DeviceObject,
1047 IN INTERFACE_TYPE BusType,
1048 IN ULONG BusNumber,
1049 IN ULONG SlotNumber,
1050 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
1051
1052 NTHALAPI
1053 ULONG
1054 NTAPI
1055 HalGetInterruptVector(
1056 IN INTERFACE_TYPE InterfaceType,
1057 IN ULONG BusNumber,
1058 IN ULONG BusInterruptLevel,
1059 IN ULONG BusInterruptVector,
1060 OUT PKIRQL Irql,
1061 OUT PKAFFINITY Affinity);
1062
1063 NTHALAPI
1064 ULONG
1065 NTAPI
1066 HalSetBusData(
1067 IN BUS_DATA_TYPE BusDataType,
1068 IN ULONG BusNumber,
1069 IN ULONG SlotNumber,
1070 IN PVOID Buffer,
1071 IN ULONG Length);
1072
1073 #endif
1074
1075 #endif /* !defined(NO_LEGACY_DRIVERS) */
1076
1077 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1078
1079 NTHALAPI
1080 PADAPTER_OBJECT
1081 NTAPI
1082 HalGetAdapter(
1083 IN PDEVICE_DESCRIPTION DeviceDescription,
1084 IN OUT PULONG NumberOfMapRegisters);
1085
1086 NTHALAPI
1087 BOOLEAN
1088 NTAPI
1089 HalMakeBeep(
1090 IN ULONG Frequency);
1091
1092 VOID
1093 NTAPI
1094 HalPutDmaAdapter(
1095 IN PADAPTER_OBJECT DmaAdapter);
1096
1097 NTHALAPI
1098 VOID
1099 NTAPI
1100 HalAcquireDisplayOwnership(
1101 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
1102
1103 NTHALAPI
1104 ULONG
1105 NTAPI
1106 HalGetBusData(
1107 IN BUS_DATA_TYPE BusDataType,
1108 IN ULONG BusNumber,
1109 IN ULONG SlotNumber,
1110 OUT PVOID Buffer,
1111 IN ULONG Length);
1112
1113 NTHALAPI
1114 ULONG
1115 NTAPI
1116 HalGetBusDataByOffset(
1117 IN BUS_DATA_TYPE BusDataType,
1118 IN ULONG BusNumber,
1119 IN ULONG SlotNumber,
1120 OUT PVOID Buffer,
1121 IN ULONG Offset,
1122 IN ULONG Length);
1123
1124 NTHALAPI
1125 ULONG
1126 NTAPI
1127 HalSetBusDataByOffset(
1128 IN BUS_DATA_TYPE BusDataType,
1129 IN ULONG BusNumber,
1130 IN ULONG SlotNumber,
1131 IN PVOID Buffer,
1132 IN ULONG Offset,
1133 IN ULONG Length);
1134
1135 NTHALAPI
1136 BOOLEAN
1137 NTAPI
1138 HalTranslateBusAddress(
1139 IN INTERFACE_TYPE InterfaceType,
1140 IN ULONG BusNumber,
1141 IN PHYSICAL_ADDRESS BusAddress,
1142 IN OUT PULONG AddressSpace,
1143 OUT PPHYSICAL_ADDRESS TranslatedAddress);
1144
1145 #endif
1146
1147 #if (NTDDI_VERSION >= NTDDI_WINXP)
1148 NTKERNELAPI
1149 VOID
1150 FASTCALL
1151 HalExamineMBR(
1152 IN PDEVICE_OBJECT DeviceObject,
1153 IN ULONG SectorSize,
1154 IN ULONG MBRTypeIdentifier,
1155 OUT PVOID *Buffer);
1156 #endif
1157
1158 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
1159 // nothing here
1160 #else
1161
1162 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1163 //DECLSPEC_DEPRECATED_DDK
1164 NTHALAPI
1165 VOID
1166 NTAPI
1167 IoFreeAdapterChannel(
1168 IN PADAPTER_OBJECT AdapterObject);
1169
1170 //DECLSPEC_DEPRECATED_DDK
1171 NTHALAPI
1172 BOOLEAN
1173 NTAPI
1174 IoFlushAdapterBuffers(
1175 IN PADAPTER_OBJECT AdapterObject,
1176 IN PMDL Mdl,
1177 IN PVOID MapRegisterBase,
1178 IN PVOID CurrentVa,
1179 IN ULONG Length,
1180 IN BOOLEAN WriteToDevice);
1181
1182 //DECLSPEC_DEPRECATED_DDK
1183 NTHALAPI
1184 VOID
1185 NTAPI
1186 IoFreeMapRegisters(
1187 IN PADAPTER_OBJECT AdapterObject,
1188 IN PVOID MapRegisterBase,
1189 IN ULONG NumberOfMapRegisters);
1190
1191 //DECLSPEC_DEPRECATED_DDK
1192 NTHALAPI
1193 PVOID
1194 NTAPI
1195 HalAllocateCommonBuffer(
1196 IN PADAPTER_OBJECT AdapterObject,
1197 IN ULONG Length,
1198 OUT PPHYSICAL_ADDRESS LogicalAddress,
1199 IN BOOLEAN CacheEnabled);
1200
1201 //DECLSPEC_DEPRECATED_DDK
1202 NTHALAPI
1203 VOID
1204 NTAPI
1205 HalFreeCommonBuffer(
1206 IN PADAPTER_OBJECT AdapterObject,
1207 IN ULONG Length,
1208 IN PHYSICAL_ADDRESS LogicalAddress,
1209 IN PVOID VirtualAddress,
1210 IN BOOLEAN CacheEnabled);
1211
1212 //DECLSPEC_DEPRECATED_DDK
1213 NTHALAPI
1214 ULONG
1215 NTAPI
1216 HalReadDmaCounter(
1217 IN PADAPTER_OBJECT AdapterObject);
1218
1219 NTHALAPI
1220 NTSTATUS
1221 NTAPI
1222 HalAllocateAdapterChannel(
1223 IN PADAPTER_OBJECT AdapterObject,
1224 IN PWAIT_CONTEXT_BLOCK Wcb,
1225 IN ULONG NumberOfMapRegisters,
1226 IN PDRIVER_CONTROL ExecutionRoutine);
1227
1228 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1229
1230 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
1231
1232 /* I/O Manager Functions */
1233
1234 /*
1235 * VOID IoAssignArcName(
1236 * IN PUNICODE_STRING ArcName,
1237 * IN PUNICODE_STRING DeviceName);
1238 */
1239 #define IoAssignArcName(_ArcName, _DeviceName) ( \
1240 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
1241
1242 /*
1243 * VOID
1244 * IoDeassignArcName(
1245 * IN PUNICODE_STRING ArcName)
1246 */
1247 #define IoDeassignArcName IoDeleteSymbolicLink
1248
1249 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1250
1251 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
1252 NTKERNELAPI
1253 NTSTATUS
1254 NTAPI
1255 IoAllocateAdapterChannel(
1256 IN PADAPTER_OBJECT AdapterObject,
1257 IN PDEVICE_OBJECT DeviceObject,
1258 IN ULONG NumberOfMapRegisters,
1259 IN PDRIVER_CONTROL ExecutionRoutine,
1260 IN PVOID Context);
1261 #endif
1262
1263 //DECLSPEC_DEPRECATED_DDK
1264 NTHALAPI
1265 PHYSICAL_ADDRESS
1266 NTAPI
1267 IoMapTransfer(
1268 IN PADAPTER_OBJECT AdapterObject,
1269 IN PMDL Mdl,
1270 IN PVOID MapRegisterBase,
1271 IN PVOID CurrentVa,
1272 IN OUT PULONG Length,
1273 IN BOOLEAN WriteToDevice);
1274
1275 NTKERNELAPI
1276 VOID
1277 NTAPI
1278 IoAllocateController(
1279 IN PCONTROLLER_OBJECT ControllerObject,
1280 IN PDEVICE_OBJECT DeviceObject,
1281 IN PDRIVER_CONTROL ExecutionRoutine,
1282 IN PVOID Context OPTIONAL);
1283
1284 NTKERNELAPI
1285 PCONTROLLER_OBJECT
1286 NTAPI
1287 IoCreateController(
1288 IN ULONG Size);
1289
1290 NTKERNELAPI
1291 VOID
1292 NTAPI
1293 IoDeleteController(
1294 IN PCONTROLLER_OBJECT ControllerObject);
1295
1296 NTKERNELAPI
1297 VOID
1298 NTAPI
1299 IoFreeController(
1300 IN PCONTROLLER_OBJECT ControllerObject);
1301
1302 NTKERNELAPI
1303 PCONFIGURATION_INFORMATION
1304 NTAPI
1305 IoGetConfigurationInformation(
1306 VOID);
1307
1308 NTKERNELAPI
1309 PDEVICE_OBJECT
1310 NTAPI
1311 IoGetDeviceToVerify(
1312 IN PETHREAD Thread);
1313
1314 NTKERNELAPI
1315 VOID
1316 NTAPI
1317 IoCancelFileOpen(
1318 IN PDEVICE_OBJECT DeviceObject,
1319 IN PFILE_OBJECT FileObject);
1320
1321 NTKERNELAPI
1322 PGENERIC_MAPPING
1323 NTAPI
1324 IoGetFileObjectGenericMapping(
1325 VOID);
1326
1327 NTKERNELAPI
1328 PIRP
1329 NTAPI
1330 IoMakeAssociatedIrp(
1331 IN PIRP Irp,
1332 IN CCHAR StackSize);
1333
1334 NTKERNELAPI
1335 NTSTATUS
1336 NTAPI
1337 IoQueryDeviceDescription(
1338 IN PINTERFACE_TYPE BusType OPTIONAL,
1339 IN PULONG BusNumber OPTIONAL,
1340 IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
1341 IN PULONG ControllerNumber OPTIONAL,
1342 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
1343 IN PULONG PeripheralNumber OPTIONAL,
1344 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
1345 IN OUT PVOID Context OPTIONAL);
1346
1347 NTKERNELAPI
1348 VOID
1349 NTAPI
1350 IoRaiseHardError(
1351 IN PIRP Irp,
1352 IN PVPB Vpb OPTIONAL,
1353 IN PDEVICE_OBJECT RealDeviceObject);
1354
1355 NTKERNELAPI
1356 BOOLEAN
1357 NTAPI
1358 IoRaiseInformationalHardError(
1359 IN NTSTATUS ErrorStatus,
1360 IN PUNICODE_STRING String OPTIONAL,
1361 IN PKTHREAD Thread OPTIONAL);
1362
1363 NTKERNELAPI
1364 VOID
1365 NTAPI
1366 IoRegisterBootDriverReinitialization(
1367 IN PDRIVER_OBJECT DriverObject,
1368 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
1369 IN PVOID Context OPTIONAL);
1370
1371 NTKERNELAPI
1372 VOID
1373 NTAPI
1374 IoRegisterDriverReinitialization(
1375 IN PDRIVER_OBJECT DriverObject,
1376 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
1377 IN PVOID Context OPTIONAL);
1378
1379 NTKERNELAPI
1380 NTSTATUS
1381 NTAPI
1382 IoAttachDeviceByPointer(
1383 IN PDEVICE_OBJECT SourceDevice,
1384 IN PDEVICE_OBJECT TargetDevice);
1385
1386 NTKERNELAPI
1387 NTSTATUS
1388 NTAPI
1389 IoReportDetectedDevice(
1390 IN PDRIVER_OBJECT DriverObject,
1391 IN INTERFACE_TYPE LegacyBusType,
1392 IN ULONG BusNumber,
1393 IN ULONG SlotNumber,
1394 IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
1395 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
1396 IN BOOLEAN ResourceAssigned,
1397 IN OUT PDEVICE_OBJECT *DeviceObject);
1398
1399 NTKERNELAPI
1400 NTSTATUS
1401 NTAPI
1402 IoReportResourceForDetection(
1403 IN PDRIVER_OBJECT DriverObject,
1404 IN PCM_RESOURCE_LIST DriverList OPTIONAL,
1405 IN ULONG DriverListSize OPTIONAL,
1406 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
1407 IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
1408 IN ULONG DeviceListSize OPTIONAL,
1409 OUT PBOOLEAN ConflictDetected);
1410
1411 NTKERNELAPI
1412 NTSTATUS
1413 NTAPI
1414 IoReportResourceUsage(
1415 IN PUNICODE_STRING DriverClassName OPTIONAL,
1416 IN PDRIVER_OBJECT DriverObject,
1417 IN PCM_RESOURCE_LIST DriverList OPTIONAL,
1418 IN ULONG DriverListSize OPTIONAL,
1419 IN PDEVICE_OBJECT DeviceObject,
1420 IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
1421 IN ULONG DeviceListSize OPTIONAL,
1422 IN BOOLEAN OverrideConflict,
1423 OUT PBOOLEAN ConflictDetected);
1424
1425 NTKERNELAPI
1426 VOID
1427 NTAPI
1428 IoSetHardErrorOrVerifyDevice(
1429 IN PIRP Irp,
1430 IN PDEVICE_OBJECT DeviceObject);
1431
1432 NTKERNELAPI
1433 NTSTATUS
1434 NTAPI
1435 IoAssignResources(
1436 IN PUNICODE_STRING RegistryPath,
1437 IN PUNICODE_STRING DriverClassName OPTIONAL,
1438 IN PDRIVER_OBJECT DriverObject,
1439 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
1440 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
1441 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
1442
1443 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1444
1445 #if (NTDDI_VERSION >= NTDDI_WINXP)
1446
1447 NTKERNELAPI
1448 NTSTATUS
1449 NTAPI
1450 IoCreateDisk(
1451 IN PDEVICE_OBJECT DeviceObject,
1452 IN PCREATE_DISK Disk OPTIONAL);
1453
1454 NTKERNELAPI
1455 NTSTATUS
1456 NTAPI
1457 IoReadDiskSignature(
1458 IN PDEVICE_OBJECT DeviceObject,
1459 IN ULONG BytesPerSector,
1460 OUT PDISK_SIGNATURE Signature);
1461
1462 NTKERNELAPI
1463 NTSTATUS
1464 FASTCALL
1465 IoReadPartitionTable(
1466 IN PDEVICE_OBJECT DeviceObject,
1467 IN ULONG SectorSize,
1468 IN BOOLEAN ReturnRecognizedPartitions,
1469 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
1470
1471 NTKERNELAPI
1472 NTSTATUS
1473 NTAPI
1474 IoReadPartitionTableEx(
1475 IN PDEVICE_OBJECT DeviceObject,
1476 IN struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
1477
1478 NTKERNELAPI
1479 NTSTATUS
1480 FASTCALL
1481 IoSetPartitionInformation(
1482 IN PDEVICE_OBJECT DeviceObject,
1483 IN ULONG SectorSize,
1484 IN ULONG PartitionNumber,
1485 IN ULONG PartitionType);
1486
1487 NTKERNELAPI
1488 NTSTATUS
1489 NTAPI
1490 IoSetPartitionInformationEx(
1491 IN PDEVICE_OBJECT DeviceObject,
1492 IN ULONG PartitionNumber,
1493 IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
1494
1495 NTKERNELAPI
1496 NTSTATUS
1497 NTAPI
1498 IoSetSystemPartition(
1499 IN PUNICODE_STRING VolumeNameString);
1500
1501 NTKERNELAPI
1502 BOOLEAN
1503 NTAPI
1504 IoSetThreadHardErrorMode(
1505 IN BOOLEAN EnableHardErrors);
1506
1507 NTKERNELAPI
1508 NTSTATUS
1509 NTAPI
1510 IoVerifyPartitionTable(
1511 IN PDEVICE_OBJECT DeviceObject,
1512 IN BOOLEAN FixErrors);
1513
1514 NTKERNELAPI
1515 NTSTATUS
1516 NTAPI
1517 IoVolumeDeviceToDosName(
1518 IN PVOID VolumeDeviceObject,
1519 OUT PUNICODE_STRING DosName);
1520
1521 NTKERNELAPI
1522 NTSTATUS
1523 FASTCALL
1524 IoWritePartitionTable(
1525 IN PDEVICE_OBJECT DeviceObject,
1526 IN ULONG SectorSize,
1527 IN ULONG SectorsPerTrack,
1528 IN ULONG NumberOfHeads,
1529 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
1530
1531 NTKERNELAPI
1532 NTSTATUS
1533 NTAPI
1534 IoWritePartitionTableEx(
1535 IN PDEVICE_OBJECT DeviceObject,
1536 IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
1537
1538 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1539
1540 /** Kernel debugger routines **/
1541
1542 NTSYSAPI
1543 ULONG
1544 NTAPI
1545 DbgPrompt(
1546 IN PCCH Prompt,
1547 OUT PCH Response,
1548 IN ULONG MaximumResponseLength);
1549
1550 /* Kernel Functions */
1551
1552 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1553
1554 NTKERNELAPI
1555 DECLSPEC_NORETURN
1556 VOID
1557 NTAPI
1558 KeBugCheck(
1559 IN ULONG BugCheckCode);
1560
1561 NTKERNELAPI
1562 LONG
1563 NTAPI
1564 KePulseEvent(
1565 IN OUT PRKEVENT Event,
1566 IN KPRIORITY Increment,
1567 IN BOOLEAN Wait);
1568
1569 NTKERNELAPI
1570 LONG
1571 NTAPI
1572 KeSetBasePriorityThread(
1573 IN OUT PRKTHREAD Thread,
1574 IN LONG Increment);
1575
1576 #endif
1577
1578 /* Memory Manager Types */
1579
1580 typedef struct _PHYSICAL_MEMORY_RANGE {
1581 PHYSICAL_ADDRESS BaseAddress;
1582 LARGE_INTEGER NumberOfBytes;
1583 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
1584
1585 /* Memory Manager Functions */
1586
1587 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1588
1589 NTKERNELAPI
1590 PPHYSICAL_MEMORY_RANGE
1591 NTAPI
1592 MmGetPhysicalMemoryRanges(
1593 VOID);
1594
1595 NTKERNELAPI
1596 PHYSICAL_ADDRESS
1597 NTAPI
1598 MmGetPhysicalAddress(
1599 IN PVOID BaseAddress);
1600
1601 NTKERNELAPI
1602 BOOLEAN
1603 NTAPI
1604 MmIsNonPagedSystemAddressValid(
1605 IN PVOID VirtualAddress);
1606
1607 NTKERNELAPI
1608 PVOID
1609 NTAPI
1610 MmAllocateNonCachedMemory(
1611 IN SIZE_T NumberOfBytes);
1612
1613 NTKERNELAPI
1614 VOID
1615 NTAPI
1616 MmFreeNonCachedMemory(
1617 IN PVOID BaseAddress,
1618 IN SIZE_T NumberOfBytes);
1619
1620 NTKERNELAPI
1621 PVOID
1622 NTAPI
1623 MmGetVirtualForPhysical(
1624 IN PHYSICAL_ADDRESS PhysicalAddress);
1625
1626 NTKERNELAPI
1627 NTSTATUS
1628 NTAPI
1629 MmMapUserAddressesToPage(
1630 IN PVOID BaseAddress,
1631 IN SIZE_T NumberOfBytes,
1632 IN PVOID PageAddress);
1633
1634 NTKERNELAPI
1635 PVOID
1636 NTAPI
1637 MmMapVideoDisplay(
1638 IN PHYSICAL_ADDRESS PhysicalAddress,
1639 IN SIZE_T NumberOfBytes,
1640 IN MEMORY_CACHING_TYPE CacheType);
1641
1642 NTKERNELAPI
1643 NTSTATUS
1644 NTAPI
1645 MmMapViewInSessionSpace(
1646 IN PVOID Section,
1647 OUT PVOID *MappedBase,
1648 IN OUT PSIZE_T ViewSize);
1649
1650 NTKERNELAPI
1651 NTSTATUS
1652 NTAPI
1653 MmMapViewInSystemSpace(
1654 IN PVOID Section,
1655 OUT PVOID *MappedBase,
1656 IN OUT PSIZE_T ViewSize);
1657
1658 NTKERNELAPI
1659 BOOLEAN
1660 NTAPI
1661 MmIsAddressValid(
1662 IN PVOID VirtualAddress);
1663
1664 NTKERNELAPI
1665 BOOLEAN
1666 NTAPI
1667 MmIsThisAnNtAsSystem(
1668 VOID);
1669
1670 NTKERNELAPI
1671 VOID
1672 NTAPI
1673 MmLockPagableSectionByHandle(
1674 IN PVOID ImageSectionHandle);
1675
1676 NTKERNELAPI
1677 NTSTATUS
1678 NTAPI
1679 MmUnmapViewInSessionSpace(
1680 IN PVOID MappedBase);
1681
1682 NTKERNELAPI
1683 NTSTATUS
1684 NTAPI
1685 MmUnmapViewInSystemSpace(
1686 IN PVOID MappedBase);
1687
1688 NTKERNELAPI
1689 VOID
1690 NTAPI
1691 MmUnsecureVirtualMemory(
1692 IN HANDLE SecureHandle);
1693
1694 NTKERNELAPI
1695 NTSTATUS
1696 NTAPI
1697 MmRemovePhysicalMemory(
1698 IN PPHYSICAL_ADDRESS StartAddress,
1699 IN OUT PLARGE_INTEGER NumberOfBytes);
1700
1701 NTKERNELAPI
1702 HANDLE
1703 NTAPI
1704 MmSecureVirtualMemory(
1705 IN PVOID Address,
1706 IN SIZE_T Size,
1707 IN ULONG ProbeMode);
1708
1709 NTKERNELAPI
1710 VOID
1711 NTAPI
1712 MmUnmapVideoDisplay(
1713 IN PVOID BaseAddress,
1714 IN SIZE_T NumberOfBytes);
1715
1716 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1717
1718 /* NtXxx Functions */
1719
1720 NTSYSCALLAPI
1721 NTSTATUS
1722 NTAPI
1723 NtOpenProcess(
1724 OUT PHANDLE ProcessHandle,
1725 IN ACCESS_MASK DesiredAccess,
1726 IN POBJECT_ATTRIBUTES ObjectAttributes,
1727 IN PCLIENT_ID ClientId OPTIONAL);
1728
1729 NTSYSCALLAPI
1730 NTSTATUS
1731 NTAPI
1732 NtQueryInformationProcess(
1733 IN HANDLE ProcessHandle,
1734 IN PROCESSINFOCLASS ProcessInformationClass,
1735 OUT PVOID ProcessInformation OPTIONAL,
1736 IN ULONG ProcessInformationLength,
1737 OUT PULONG ReturnLength OPTIONAL);
1738
1739 /** Process manager routines **/
1740
1741 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1742
1743 NTKERNELAPI
1744 NTSTATUS
1745 NTAPI
1746 PsSetLoadImageNotifyRoutine(
1747 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
1748
1749 NTKERNELAPI
1750 NTSTATUS
1751 NTAPI
1752 PsSetCreateThreadNotifyRoutine(
1753 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
1754
1755 NTKERNELAPI
1756 NTSTATUS
1757 NTAPI
1758 PsSetCreateProcessNotifyRoutine(
1759 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
1760 IN BOOLEAN Remove);
1761
1762 NTKERNELAPI
1763 HANDLE
1764 NTAPI
1765 PsGetCurrentProcessId(
1766 VOID);
1767
1768 NTKERNELAPI
1769 HANDLE
1770 NTAPI
1771 PsGetCurrentThreadId(
1772 VOID);
1773
1774 NTKERNELAPI
1775 BOOLEAN
1776 NTAPI
1777 PsGetVersion(
1778 OUT PULONG MajorVersion OPTIONAL,
1779 OUT PULONG MinorVersion OPTIONAL,
1780 OUT PULONG BuildNumber OPTIONAL,
1781 OUT PUNICODE_STRING CSDVersion OPTIONAL);
1782
1783 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1784
1785 #if (NTDDI_VERSION >= NTDDI_WINXP)
1786
1787 NTKERNELAPI
1788 HANDLE
1789 NTAPI
1790 PsGetProcessId(
1791 IN PEPROCESS Process);
1792
1793 NTKERNELAPI
1794 NTSTATUS
1795 NTAPI
1796 PsRemoveCreateThreadNotifyRoutine(
1797 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
1798
1799 NTKERNELAPI
1800 NTSTATUS
1801 NTAPI
1802 PsRemoveLoadImageNotifyRoutine(
1803 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
1804
1805 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1806
1807 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
1808
1809 /* RTL Types */
1810
1811 typedef struct _RTL_SPLAY_LINKS {
1812 struct _RTL_SPLAY_LINKS *Parent;
1813 struct _RTL_SPLAY_LINKS *LeftChild;
1814 struct _RTL_SPLAY_LINKS *RightChild;
1815 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
1816
1817 /* RTL Functions */
1818
1819 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
1820
1821 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
1822 *CallersAddress = (PVOID)_ReturnAddress(); \
1823 *CallersCaller = NULL;
1824 #else
1825
1826 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1827 NTSYSAPI
1828 VOID
1829 NTAPI
1830 RtlGetCallersAddress(
1831 OUT PVOID *CallersAddress,
1832 OUT PVOID *CallersCaller);
1833 #endif
1834
1835 #endif
1836
1837 #if !defined(MIDL_PASS)
1838
1839 FORCEINLINE
1840 LUID
1841 NTAPI_INLINE
1842 RtlConvertLongToLuid(
1843 IN LONG Val)
1844 {
1845 LUID Luid;
1846 LARGE_INTEGER Temp;
1847
1848 Temp.QuadPart = Val;
1849 Luid.LowPart = Temp.u.LowPart;
1850 Luid.HighPart = Temp.u.HighPart;
1851 return Luid;
1852 }
1853
1854 FORCEINLINE
1855 LUID
1856 NTAPI_INLINE
1857 RtlConvertUlongToLuid(
1858 IN ULONG Val)
1859 {
1860 LUID Luid;
1861
1862 Luid.LowPart = Val;
1863 Luid.HighPart = 0;
1864 return Luid;
1865 }
1866
1867 #endif
1868
1869 #if defined(_AMD64_) || defined(_IA64_)
1870 //DECLSPEC_DEPRECATED_DDK_WINXP
1871 __inline
1872 LARGE_INTEGER
1873 NTAPI_INLINE
1874 RtlLargeIntegerDivide(
1875 IN LARGE_INTEGER Dividend,
1876 IN LARGE_INTEGER Divisor,
1877 OUT PLARGE_INTEGER Remainder OPTIONAL)
1878 {
1879 LARGE_INTEGER ret;
1880 ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
1881 if (Remainder)
1882 Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
1883 return ret;
1884 }
1885
1886 #else
1887
1888 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1889 NTSYSAPI
1890 LARGE_INTEGER
1891 NTAPI
1892 RtlLargeIntegerDivide(
1893 IN LARGE_INTEGER Dividend,
1894 IN LARGE_INTEGER Divisor,
1895 OUT PLARGE_INTEGER Remainder OPTIONAL);
1896 #endif
1897
1898 #endif /* defined(_AMD64_) || defined(_IA64_) */
1899
1900 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1901
1902 NTSYSAPI
1903 BOOLEAN
1904 NTAPI
1905 RtlPrefixUnicodeString(
1906 IN PCUNICODE_STRING String1,
1907 IN PCUNICODE_STRING String2,
1908 IN BOOLEAN CaseInSensitive);
1909
1910 NTSYSAPI
1911 VOID
1912 NTAPI
1913 RtlUpperString(
1914 IN OUT PSTRING DestinationString,
1915 IN const PSTRING SourceString);
1916
1917 NTSYSAPI
1918 NTSTATUS
1919 NTAPI
1920 RtlUpcaseUnicodeString(
1921 IN OUT PUNICODE_STRING DestinationString,
1922 IN PCUNICODE_STRING SourceString,
1923 IN BOOLEAN AllocateDestinationString);
1924
1925 NTSYSAPI
1926 VOID
1927 NTAPI
1928 RtlMapGenericMask(
1929 IN OUT PACCESS_MASK AccessMask,
1930 IN PGENERIC_MAPPING GenericMapping);
1931
1932 NTSYSAPI
1933 NTSTATUS
1934 NTAPI
1935 RtlVolumeDeviceToDosName(
1936 IN PVOID VolumeDeviceObject,
1937 OUT PUNICODE_STRING DosName);
1938
1939 NTSYSAPI
1940 NTSTATUS
1941 NTAPI
1942 RtlGetVersion(
1943 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
1944
1945 NTSYSAPI
1946 NTSTATUS
1947 NTAPI
1948 RtlVerifyVersionInfo(
1949 IN PRTL_OSVERSIONINFOEXW VersionInfo,
1950 IN ULONG TypeMask,
1951 IN ULONGLONG ConditionMask);
1952
1953 NTSYSAPI
1954 LONG
1955 NTAPI
1956 RtlCompareString(
1957 IN const PSTRING String1,
1958 IN const PSTRING String2,
1959 BOOLEAN CaseInSensitive);
1960
1961 NTSYSAPI
1962 VOID
1963 NTAPI
1964 RtlCopyString(
1965 OUT PSTRING DestinationString,
1966 IN const PSTRING SourceString OPTIONAL);
1967
1968 NTSYSAPI
1969 BOOLEAN
1970 NTAPI
1971 RtlEqualString(
1972 IN const PSTRING String1,
1973 IN const PSTRING String2,
1974 IN BOOLEAN CaseInSensitive);
1975
1976 NTSYSAPI
1977 NTSTATUS
1978 NTAPI
1979 RtlCharToInteger(
1980 IN PCSZ String,
1981 IN ULONG Base OPTIONAL,
1982 OUT PULONG Value);
1983
1984 NTSYSAPI
1985 CHAR
1986 NTAPI
1987 RtlUpperChar(
1988 IN CHAR Character);
1989
1990 NTSYSAPI
1991 ULONG
1992 NTAPI
1993 RtlWalkFrameChain(
1994 OUT PVOID *Callers,
1995 IN ULONG Count,
1996 IN ULONG Flags);
1997
1998 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1999
2000 /* Security reference monitor routines */
2001
2002 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2003 NTKERNELAPI
2004 BOOLEAN
2005 NTAPI
2006 SeSinglePrivilegeCheck(
2007 IN LUID PrivilegeValue,
2008 IN KPROCESSOR_MODE PreviousMode);
2009 #endif
2010
2011 /* ZwXxx Functions */
2012
2013 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2014
2015 NTSTATUS
2016 NTAPI
2017 ZwCancelTimer(
2018 IN HANDLE TimerHandle,
2019 OUT PBOOLEAN CurrentState OPTIONAL);
2020
2021 NTSTATUS
2022 NTAPI
2023 ZwCreateTimer(
2024 OUT PHANDLE TimerHandle,
2025 IN ACCESS_MASK DesiredAccess,
2026 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
2027 IN TIMER_TYPE TimerType);
2028
2029 NTSTATUS
2030 NTAPI
2031 ZwOpenTimer(
2032 OUT PHANDLE TimerHandle,
2033 IN ACCESS_MASK DesiredAccess,
2034 IN POBJECT_ATTRIBUTES ObjectAttributes);
2035
2036 NTSYSAPI
2037 NTSTATUS
2038 NTAPI
2039 ZwSetInformationThread(
2040 IN HANDLE ThreadHandle,
2041 IN THREADINFOCLASS ThreadInformationClass,
2042 IN PVOID ThreadInformation,
2043 IN ULONG ThreadInformationLength);
2044
2045 NTSTATUS
2046 NTAPI
2047 ZwSetTimer(
2048 IN HANDLE TimerHandle,
2049 IN PLARGE_INTEGER DueTime,
2050 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL,
2051 IN PVOID TimerContext OPTIONAL,
2052 IN BOOLEAN ResumeTimer,
2053 IN LONG Period OPTIONAL,
2054 OUT PBOOLEAN PreviousState OPTIONAL);
2055
2056 #endif
2057
2058 /* Windows Device Driver Kit */
2059 #include "winddk.h"
2060
2061 #ifdef __cplusplus
2062 }
2063 #endif
2064
2065
2066 #endif /* _NTDDK_ */