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