xref: /reactos/drivers/storage/ide/uniata/ntddk_ex.h (revision 9393fc32)
1 #ifndef __NTDDK_EX__H__
2 #define __NTDDK_EX__H__
3 
4 //#ifndef USE_REACTOS_DDK
5 #ifdef ASSERT
6 #undef ASSERT
7 #define ASSERT(x) ((void)0)
8 #endif //ASSERT
9 //#endif //USE_REACTOS_DDK
10 
11 
12 #if !defined(FILE_CHARACTERISTIC_PNP_DEVICE) || defined(USE_REACTOS_DDK) // DDK 2003
13 
14 #ifndef FILE_CHARACTERISTIC_PNP_DEVICE
15 #define FILE_CHARACTERISTIC_PNP_DEVICE  0x00000800
16 #endif
17 
18 typedef enum _SYSTEM_INFORMATION_CLASS {
19     SystemBasicInformation,
20     SystemProcessorInformation,
21     SystemPerformanceInformation,
22     SystemTimeOfDayInformation,
23     SystemPathInformation,
24     SystemProcessInformation,
25     SystemCallCountInformation,
26     SystemDeviceInformation,
27     SystemProcessorPerformanceInformation,
28     SystemFlagsInformation,
29     SystemCallTimeInformation,
30     SystemModuleInformation,
31     SystemLocksInformation,
32     SystemStackTraceInformation,
33     SystemPagedPoolInformation,
34     SystemNonPagedPoolInformation,
35     SystemHandleInformation,
36     SystemObjectInformation,
37     SystemPageFileInformation,
38     SystemVdmInstemulInformation,
39     SystemVdmBopInformation,
40     SystemFileCacheInformation,
41     SystemPoolTagInformation,
42     SystemInterruptInformation,
43     SystemDpcBehaviorInformation,
44     SystemFullMemoryInformation,
45     SystemLoadGdiDriverInformation,
46     SystemUnloadGdiDriverInformation,
47     SystemTimeAdjustmentInformation,
48     SystemSummaryMemoryInformation,
49 #ifndef USE_REACTOS_DDK
50     SystemNextEventIdInformation,
51     SystemEventIdsInformation,
52     SystemCrashDumpInformation,
53 #else
54     SystemMirrorMemoryInformation,
55     SystemPerformanceTraceInformation,
56     SystemObsolete0,
57 #endif // USE_REACTOS_DDK
58     SystemExceptionInformation,
59     SystemCrashDumpStateInformation,
60     SystemKernelDebuggerInformation,
61     SystemContextSwitchInformation,
62     SystemRegistryQuotaInformation,
63     SystemExtendServiceTableInformation,
64     SystemPrioritySeperation,
65     SystemPlugPlayBusInformation,
66     SystemDockInformation,
67 #ifdef USE_REACTOS_DDK
68     SystemPowerInformationNative,
69 #elif defined IRP_MN_START_DEVICE
70     SystemPowerInformationInfo,
71 #else
72     SystemPowerInformation,
73 #endif // USE_REACTOS_DDK
74     SystemProcessorSpeedInformation,
75     SystemCurrentTimeZoneInformation,
76     SystemLookasideInformation,
77 #ifdef USE_REACTOS_DDK
78     SystemTimeSlipNotification,
79     SystemSessionCreate,
80     SystemSessionDetach,
81     SystemSessionInformation,
82     SystemRangeStartInformation,
83     SystemVerifierInformation,
84     SystemAddVerifier,
85     SystemSessionProcessesInformation,
86     SystemLoadGdiDriverInSystemSpaceInformation,
87     SystemNumaProcessorMap,
88     SystemPrefetcherInformation,
89     SystemExtendedProcessInformation,
90     SystemRecommendedSharedDataAlignment,
91     SystemComPlusPackage,
92     SystemNumaAvailableMemory,
93     SystemProcessorPowerInformation,
94     SystemEmulationBasicInformation,
95     SystemEmulationProcessorInformation,
96     SystemExtendedHanfleInformation,
97     SystemLostDelayedWriteInformation,
98     SystemBigPoolInformation,
99     SystemSessionPoolTagInformation,
100     SystemSessionMappedViewInformation,
101     SystemHotpatchInformation,
102     SystemObjectSecurityMode,
103     SystemWatchDogTimerHandler,
104     SystemWatchDogTimerInformation,
105     SystemLogicalProcessorInformation,
106     SystemWo64SharedInformationObosolete,
107     SystemRegisterFirmwareTableInformationHandler,
108     SystemFirmwareTableInformation,
109     SystemModuleInformationEx,
110     SystemVerifierTriageInformation,
111     SystemSuperfetchInformation,
112     SystemMemoryListInformation,
113     SystemFileCacheInformationEx,
114     SystemThreadPriorityClientIdInformation,
115     SystemProcessorIdleCycleTimeInformation,
116     SystemVerifierCancellationInformation,
117     SystemProcessorPowerInformationEx,
118     SystemRefTraceInformation,
119     SystemSpecialPoolInformation,
120     SystemProcessIdInformation,
121     SystemErrorPortInformation,
122     SystemBootEnvironmentInformation,
123     SystemHypervisorInformation,
124     SystemVerifierInformationEx,
125     SystemTimeZoneInformation,
126     SystemImageFileExecutionOptionsInformation,
127     SystemCoverageInformation,
128     SystemPrefetchPathInformation,
129     SystemVerifierFaultsInformation,
130     MaxSystemInfoClass,
131 #endif // USE_REACTOS_DDK
132 } SYSTEM_INFORMATION_CLASS;
133 
134 #endif // !defined(FILE_CHARACTERISTIC_PNP_DEVICE) || defined(USE_REACTOS_DDK)
135 
136 
137 NTSYSAPI
138 NTSTATUS
139 NTAPI
140 ZwQuerySystemInformation(
141     IN SYSTEM_INFORMATION_CLASS SystemInfoClass,
142     OUT PVOID SystemInfoBuffer,
143     IN ULONG SystemInfoBufferSize,
144     OUT PULONG BytesReturned OPTIONAL
145 );
146 
147 NTSYSAPI
148 NTSTATUS
149 NTAPI
150 NtQuerySystemInformation(
151     IN SYSTEM_INFORMATION_CLASS SystemInfoClass,
152     OUT PVOID SystemInfoBuffer,
153     IN ULONG SystemInfoBufferSize,
154     OUT PULONG BytesReturned OPTIONAL
155 );
156 
157 typedef struct _SYSTEM_BASIC_INFORMATION {
158     ULONG Reserved;
159     ULONG TimerResolution;
160     ULONG PageSize;
161     ULONG NumberOfPhysicalPages;
162     ULONG LowestPhysicalPageNumber;
163     ULONG HighestPhysicalPageNumber;
164     ULONG AllocationGranularity;
165     ULONG MinimumUserModeAddress;
166     ULONG MaximumUserModeAddress;
167     KAFFINITY ActiveProcessorsAffinityMask;
168     CCHAR NumberOfProcessors;
169 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
170 
171 typedef struct _SYSTEM_MODULE_ENTRY
172 {
173     ULONG  Unused;
174     ULONG  Always0;
175     PVOID  ModuleBaseAddress;
176     ULONG  ModuleSize;
177     ULONG  Unknown;
178     ULONG  ModuleEntryIndex;
179     USHORT ModuleNameLength;
180     USHORT ModuleNameOffset;
181     CHAR   ModuleName [256];
182 } SYSTEM_MODULE_ENTRY, * PSYSTEM_MODULE_ENTRY;
183 
184 typedef struct _SYSTEM_MODULE_INFORMATION
185 {
186     ULONG               Count;
187     SYSTEM_MODULE_ENTRY Module [1];
188 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
189 
190 typedef unsigned short  WORD;
191 #ifndef __REACTOS__
192 typedef unsigned int    BOOL;
193 #endif //__REACTOS__
194 typedef unsigned long   DWORD;
195 typedef unsigned char   BYTE;
196 
197 
198 typedef struct _LDR_DATA_TABLE_ENTRY {
199     LIST_ENTRY     LoadOrder;
200     LIST_ENTRY     MemoryOrder;
201     LIST_ENTRY     InitializationOrder;
202     PVOID          ModuleBaseAddress;
203     PVOID          EntryPoint;
204     ULONG          ModuleSize;
205     UNICODE_STRING FullModuleName;
206     UNICODE_STRING ModuleName;
207     ULONG          Flags;
208     USHORT         LoadCount;
209     USHORT         TlsIndex;
210     union {
211         LIST_ENTRY Hash;
212         struct {
213             PVOID SectionPointer;
214             ULONG CheckSum;
215         };
216     };
217     ULONG   TimeStamp;
218 } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
219 
220 typedef struct _PEB_LDR_DATA {
221     ULONG          Length;
222     BOOLEAN        Initialized;
223     HANDLE         SsHandle;
224     LIST_ENTRY     LoadOrder;
225     LIST_ENTRY     MemoryOrder;
226     LIST_ENTRY     InitializationOrder;
227 } PEB_LDR_DATA, *PPEB_LDR_DATA;
228 
229 typedef struct _PEB_FREE_BLOCK {
230     struct _PEB_FREE_BLOCK *Next;
231     ULONG Size;
232 } PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;
233 
234 #define GDI_HANDLE_BUFFER_SIZE      34
235 
236 #define TLS_MINIMUM_AVAILABLE 64    // winnt
237 
238 typedef struct _PEB {
239     BOOLEAN InheritedAddressSpace;      // These four fields cannot change unless the
240     BOOLEAN ReadImageFileExecOptions;   //
241     BOOLEAN BeingDebugged;              //
242     BOOLEAN SpareBool;                  //
243     HANDLE Mutant;                      // INITIAL_PEB structure is also updated.
244 
245     PVOID ImageBaseAddress;
246     PPEB_LDR_DATA Ldr;
247     struct _RTL_USER_PROCESS_PARAMETERS *ProcessParameters;
248     PVOID SubSystemData;
249     PVOID ProcessHeap;
250     PVOID FastPebLock;
251     PVOID FastPebLockRoutine;
252     PVOID FastPebUnlockRoutine;
253     ULONG EnvironmentUpdateCount;
254     PVOID KernelCallbackTable;
255     HANDLE EventLogSection;
256     PVOID EventLog;
257     PPEB_FREE_BLOCK FreeList;
258     ULONG TlsExpansionCounter;
259     PVOID TlsBitmap;
260     ULONG TlsBitmapBits[2];         // relates to TLS_MINIMUM_AVAILABLE
261     PVOID ReadOnlySharedMemoryBase;
262     PVOID ReadOnlySharedMemoryHeap;
263     PVOID *ReadOnlyStaticServerData;
264     PVOID AnsiCodePageData;
265     PVOID OemCodePageData;
266     PVOID UnicodeCaseTableData;
267 
268     // Useful information for LdrpInitialize
269     ULONG NumberOfProcessors;
270     ULONG NtGlobalFlag;
271 
272     // Passed up from MmCreatePeb from Session Manager registry key
273 
274     LARGE_INTEGER CriticalSectionTimeout;
275     ULONG HeapSegmentReserve;
276     ULONG HeapSegmentCommit;
277     ULONG HeapDeCommitTotalFreeThreshold;
278     ULONG HeapDeCommitFreeBlockThreshold;
279 
280     // Where heap manager keeps track of all heaps created for a process
281     // Fields initialized by MmCreatePeb.  ProcessHeaps is initialized
282     // to point to the first free byte after the PEB and MaximumNumberOfHeaps
283     // is computed from the page size used to hold the PEB, less the fixed
284     // size of this data structure.
285 
286     ULONG NumberOfHeaps;
287     ULONG MaximumNumberOfHeaps;
288     PVOID *ProcessHeaps;
289 
290     //
291     //
292     PVOID GdiSharedHandleTable;
293     PVOID ProcessStarterHelper;
294     PVOID GdiDCAttributeList;
295     PVOID LoaderLock;
296 
297     // Following fields filled in by MmCreatePeb from system values and/or
298     // image header.
299 
300     ULONG OSMajorVersion;
301     ULONG OSMinorVersion;
302     ULONG OSBuildNumber;
303     ULONG OSPlatformId;
304     ULONG ImageSubsystem;
305     ULONG ImageSubsystemMajorVersion;
306     ULONG ImageSubsystemMinorVersion;
307     ULONG ImageProcessAffinityMask;
308     ULONG GdiHandleBuffer[GDI_HANDLE_BUFFER_SIZE];
309 } PEB, *PPEB;
310 
311 //
312 // Gdi command batching
313 //
314 
315 #define GDI_BATCH_BUFFER_SIZE 310
316 
317 typedef struct _GDI_TEB_BATCH {
318     ULONG Offset;
319     ULONG HDC;
320     ULONG Buffer[GDI_BATCH_BUFFER_SIZE];
321 } GDI_TEB_BATCH,*PGDI_TEB_BATCH;
322 
323 //
324 //  TEB - The thread environment block
325 //
326 
327 #define STATIC_UNICODE_BUFFER_LENGTH 261
328 #define WIN32_CLIENT_INFO_LENGTH 31
329 #define WIN32_CLIENT_INFO_SPIN_COUNT 1
330 
331 typedef struct _TEB {
332     NT_TIB NtTib;
333     PVOID  EnvironmentPointer;
334     CLIENT_ID ClientId;
335     PVOID ActiveRpcHandle;
336     PVOID ThreadLocalStoragePointer;
337     PPEB ProcessEnvironmentBlock;
338     ULONG LastErrorValue;
339     ULONG CountOfOwnedCriticalSections;
340     PVOID CsrClientThread;
341     PVOID Win32ThreadInfo;          // PtiCurrent
342     ULONG Win32ClientInfo[WIN32_CLIENT_INFO_LENGTH];    // User32 Client Info
343     PVOID WOW32Reserved;           // used by WOW
344     LCID CurrentLocale;
345     ULONG FpSoftwareStatusRegister;
346     PVOID SystemReserved1[54];      // Used by FP emulator
347     PVOID Spare1;                   // unused
348     NTSTATUS ExceptionCode;         // for RaiseUserException
349     UCHAR SpareBytes1[40];
350     PVOID SystemReserved2[10];                      // Used by user/console for temp obja
351     GDI_TEB_BATCH GdiTebBatch;      // Gdi batching
352     ULONG gdiRgn;
353     ULONG gdiPen;
354     ULONG gdiBrush;
355     CLIENT_ID RealClientId;
356     HANDLE GdiCachedProcessHandle;
357     ULONG GdiClientPID;
358     ULONG GdiClientTID;
359     PVOID GdiThreadLocalInfo;
360     PVOID UserReserved[5];          // unused
361     PVOID glDispatchTable[280];     // OpenGL
362     ULONG glReserved1[26];          // OpenGL
363     PVOID glReserved2;              // OpenGL
364     PVOID glSectionInfo;            // OpenGL
365     PVOID glSection;                // OpenGL
366     PVOID glTable;                  // OpenGL
367     PVOID glCurrentRC;              // OpenGL
368     PVOID glContext;                // OpenGL
369     ULONG LastStatusValue;
370     UNICODE_STRING StaticUnicodeString;
371     WCHAR StaticUnicodeBuffer[STATIC_UNICODE_BUFFER_LENGTH];
372     PVOID DeallocationStack;
373     PVOID TlsSlots[TLS_MINIMUM_AVAILABLE];
374     LIST_ENTRY TlsLinks;
375     PVOID Vdm;
376     PVOID ReservedForNtRpc;
377     PVOID DbgSsReserved[2];
378     ULONG HardErrorsAreDisabled;
379     PVOID Instrumentation[16];
380     PVOID WinSockData;              // WinSock
381     ULONG GdiBatchCount;
382     ULONG Spare2;
383     ULONG Spare3;
384     ULONG Spare4;
385     PVOID ReservedForOle;
386     ULONG WaitingOnLoaderLock;
387 } TEB;
388 typedef TEB *PTEB;
389 
390 typedef struct _KTHREAD_HDR {
391 
392     //
393     // The dispatcher header and mutant listhead are faifly infrequently
394     // referenced, but pad the thread to a 32-byte boundary (assumption
395     // that pool allocation is in units of 32-bytes).
396     //
397 
398     DISPATCHER_HEADER Header;
399     LIST_ENTRY MutantListHead;
400 
401     //
402     // The following fields are referenced during trap, interrupts, or
403     // context switches.
404     //
405     // N.B. The Teb address and TlsArray are loaded as a quadword quantity
406     //      on MIPS and therefore must to on a quadword boundary.
407     //
408 
409     PVOID InitialStack;
410     PVOID StackLimit;
411     PVOID Teb;
412     PVOID TlsArray;
413     PVOID KernelStack;
414     BOOLEAN DebugActive;
415     UCHAR State;
416     BOOLEAN Alerted[MaximumMode];
417     UCHAR Iopl;
418     UCHAR NpxState;
419     BOOLEAN Saturation;
420     SCHAR Priority;
421 /*    KAPC_STATE ApcState;
422     ULONG ContextSwitches;
423 
424     //
425     // The following fields are referenced during wait operations.
426     //
427 
428     NTSTATUS WaitStatus;
429     KIRQL WaitIrql;
430     KPROCESSOR_MODE WaitMode;
431     BOOLEAN WaitNext;
432     UCHAR WaitReason;
433     PRKWAIT_BLOCK WaitBlockList;
434     LIST_ENTRY WaitListEntry;
435     ULONG WaitTime;
436     SCHAR BasePriority;
437     UCHAR DecrementCount;
438     SCHAR PriorityDecrement;
439     SCHAR Quantum;
440     KWAIT_BLOCK WaitBlock[THREAD_WAIT_OBJECTS + 1];
441     PVOID LegoData;
442     ULONG KernelApcDisable;
443     KAFFINITY UserAffinity;
444     BOOLEAN SystemAffinityActive;
445     UCHAR Pad[3];
446     PVOID ServiceTable;
447 //    struct _ECHANNEL *Channel;
448 //    PVOID Section;
449 //    PCHANNEL_MESSAGE SystemView;
450 //    PCHANNEL_MESSAGE ThreadView;
451 
452     //
453     // The following fields are referenced during queue operations.
454     //
455 
456     PRKQUEUE Queue;
457     KSPIN_LOCK ApcQueueLock;
458     KTIMER Timer;
459     LIST_ENTRY QueueListEntry;
460 
461     //
462     // The following fields are referenced during read and find ready
463     // thread.
464     //
465 
466     KAFFINITY Affinity;
467     BOOLEAN Preempted;
468     BOOLEAN ProcessReadyQueue;
469     BOOLEAN KernelStackResident;
470     UCHAR NextProcessor;
471 
472     //
473     // The following fields are referenced suring system calls.
474     //
475 
476     PVOID CallbackStack;
477     PVOID Win32Thread;
478     PKTRAP_FRAME TrapFrame;
479     PKAPC_STATE ApcStatePointer[2];
480     UCHAR EnableStackSwap;
481     UCHAR LargeStack;
482     UCHAR ResourceIndex;
483     CCHAR PreviousMode;
484 
485     //
486     // The following entries are reference during clock interrupts.
487     //
488 
489     ULONG KernelTime;
490     ULONG UserTime;
491 
492     //
493     // The following fileds are referenced during APC queuing and process
494     // attach/detach.
495     //
496 
497     KAPC_STATE SavedApcState;
498     BOOLEAN Alertable;
499     UCHAR ApcStateIndex;
500     BOOLEAN ApcQueueable;
501     BOOLEAN AutoAlignment;
502 
503     //
504     // The following fields are referenced when the thread is initialized
505     // and very infrequently thereafter.
506     //
507 
508     PVOID StackBase;
509     KAPC SuspendApc;
510     KSEMAPHORE SuspendSemaphore;
511     LIST_ENTRY ThreadListEntry;
512 
513     //
514     // N.B. The below four UCHARs share the same DWORD and are modified
515     //      by other threads. Therefore, they must ALWAYS be modified
516     //      under the dispatcher lock to prevent granularity problems
517     //      on Alpha machines.
518     //
519     CCHAR FreezeCount;
520     CCHAR SuspendCount;
521     UCHAR IdealProcessor;
522     UCHAR DisableBoost;
523 */
524 } KTHREAD_HDR, *PKTHREAD_HDR;
525 
526 #ifndef __REACTOS__
527 typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
528     WORD   e_magic;                     // Magic number
529     WORD   e_cblp;                      // Bytes on last page of file
530     WORD   e_cp;                        // Pages in file
531     WORD   e_crlc;                      // Relocations
532     WORD   e_cparhdr;                   // Size of header in paragraphs
533     WORD   e_minalloc;                  // Minimum extra paragraphs needed
534     WORD   e_maxalloc;                  // Maximum extra paragraphs needed
535     WORD   e_ss;                        // Initial (relative) SS value
536     WORD   e_sp;                        // Initial SP value
537     WORD   e_csum;                      // Checksum
538     WORD   e_ip;                        // Initial IP value
539     WORD   e_cs;                        // Initial (relative) CS value
540     WORD   e_lfarlc;                    // File address of relocation table
541     WORD   e_ovno;                      // Overlay number
542     WORD   e_res[4];                    // Reserved words
543     WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
544     WORD   e_oeminfo;                   // OEM information; e_oemid specific
545     WORD   e_res2[10];                  // Reserved words
546     LONG   e_lfanew;                    // File address of new exe header
547 } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
548 
549 typedef struct _IMAGE_FILE_HEADER {
550     WORD    Machine;
551     WORD    NumberOfSections;
552     DWORD   TimeDateStamp;
553     DWORD   PointerToSymbolTable;
554     DWORD   NumberOfSymbols;
555     WORD    SizeOfOptionalHeader;
556     WORD    Characteristics;
557 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
558 
559 typedef struct _IMAGE_DATA_DIRECTORY {
560     DWORD   VirtualAddress;
561     DWORD   Size;
562 } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
563 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES    16
564 
565 
566 typedef struct _IMAGE_OPTIONAL_HEADER {
567     //
568     // Standard fields.
569     //
570 
571     WORD    Magic;
572     BYTE    MajorLinkerVersion;
573     BYTE    MinorLinkerVersion;
574     DWORD   SizeOfCode;
575     DWORD   SizeOfInitializedData;
576     DWORD   SizeOfUninitializedData;
577     DWORD   AddressOfEntryPoint;
578     DWORD   BaseOfCode;
579     DWORD   BaseOfData;
580 
581     //
582     // NT additional fields.
583     //
584 
585     DWORD   ImageBase;
586     DWORD   SectionAlignment;
587     DWORD   FileAlignment;
588     WORD    MajorOperatingSystemVersion;
589     WORD    MinorOperatingSystemVersion;
590     WORD    MajorImageVersion;
591     WORD    MinorImageVersion;
592     WORD    MajorSubsystemVersion;
593     WORD    MinorSubsystemVersion;
594     DWORD   Win32VersionValue;
595     DWORD   SizeOfImage;
596     DWORD   SizeOfHeaders;
597     DWORD   CheckSum;
598     WORD    Subsystem;
599     WORD    DllCharacteristics;
600     DWORD   SizeOfStackReserve;
601     DWORD   SizeOfStackCommit;
602     DWORD   SizeOfHeapReserve;
603     DWORD   SizeOfHeapCommit;
604     DWORD   LoaderFlags;
605     DWORD   NumberOfRvaAndSizes;
606     IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
607 } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
608 
609 typedef struct _IMAGE_NT_HEADERS {
610     DWORD Signature;
611     IMAGE_FILE_HEADER FileHeader;
612     IMAGE_OPTIONAL_HEADER32 OptionalHeader;
613 } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
614 typedef IMAGE_NT_HEADERS32                  IMAGE_NT_HEADERS;
615 typedef PIMAGE_NT_HEADERS32                 PIMAGE_NT_HEADERS;
616 
617 #define IMAGE_DIRECTORY_ENTRY_EXPORT          0   // Export Directory
618 
619 typedef struct _IMAGE_EXPORT_DIRECTORY {
620     DWORD   Characteristics;
621     DWORD   TimeDateStamp;
622     WORD    MajorVersion;
623     WORD    MinorVersion;
624     DWORD   Name;
625     DWORD   Base;
626     DWORD   NumberOfFunctions;
627     DWORD   NumberOfNames;
628     DWORD   AddressOfFunctions;     // RVA from base of image
629     DWORD   AddressOfNames;         // RVA from base of image
630     DWORD   AddressOfNameOrdinals;  // RVA from base of image
631 } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
632 #endif
633 
634 NTHALAPI
635 VOID
636 NTAPI
637 HalDisplayString (
638     PUCHAR String
639     );
640 
641 NTHALAPI
642 VOID
643 NTAPI
644 HalQueryDisplayParameters (
645     OUT PULONG WidthInCharacters,
646     OUT PULONG HeightInLines,
647     OUT PULONG CursorColumn,
648     OUT PULONG CursorRow
649     );
650 
651 NTHALAPI
652 VOID
653 NTAPI
654 HalSetDisplayParameters (
655     IN ULONG CursorColumn,
656     IN ULONG CursorRow
657     );
658 
659 extern ULONG NtBuildNumber;
660 
661 #endif //__NTDDK_EX__H__
662