IDZ DO PRZYK ADOWY ROZDZIA KATALOG KSI EK ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOŒCIACH ZAMÓW CENNIK CZYTELNIA SPIS TREŒCI KATALOG ONLINE DODAJ DO KOSZYKA FRAGMENTY KSI EK ONLINE Windows 2000/NT Native API. Leksykon Autor: Gary Nebbett T³umaczenie: Pawe³ Koronkiewicz ISBN: 83-7197-508-2 Tytu³ orygina³u: Windows NT/2000 Native API Reference Format: B5, stron: 632 Native API, czyli macierzysty interfejs programowania aplikacji systemu Windows NT, to zestaw us³ug systemowych dostarczanych przez modu³ wykonawczy NT programom trybu u ytkownika i trybu j¹dra. Leksykon Windows NT/2000 Native API jest prób¹ ca³oœciowego omówienia tego nieudokumentowanego zbioru procedur. Stanowi niezast¹pione narzêdzie projektanta oprogramowania, zawieraj¹c: Jako programiœcie pracuj¹cym na poziomie systemu, a tak e aplikacji, Leksykon Windows NT/2000 Native API pomo e Ci w: opis ponad 200 procedur macierzystego interfejsu API; szczegó³owe omówienie procedur niedostêpnych bezpoœrednio z poziomu Win32 API lub oferuj¹cych dodatkowe, istotne funkcje; przyk³adowe procedury biblioteczne i programy narzêdziowe, ilustruj¹ce dzia³anie omawianych procedur; omówienie architektury j¹dra oraz debugowania aplikacji trybu u ytkownika. tworzeniu programów narzêdziowych i mechanizmów systemowych, takich jak debugery, narzêdzia analityczne i biblioteki wykonawcze; okreœleniu czy funkcje, których brakuje w systemie, choæ nale a³oby oczekiwaæ ich obecnoœci, faktycznie nie istniej¹, czy jedynie nie zosta³y udokumentowane; zapoznaniu siê ze zmianami w API wprowadzonymi w Windows 2000; pog³êbianiu wiedzy o tajnikach funkcjonowania Windows NT. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
9836 / '78 4 Korzystanie z macierzystego interfejsu API...i... 22 Zależność między Win32 API a API macierzystym...i... 23 Przykład W.1. Typowe osłonięcie procedury API macierzystego przez interfejs Win32... 23 Przykład W.2. Najprostszy przykład osłonięcia przez Win32 procedury API macierzystego...i... 25 Wywoływanie macierzystych usług systemu z trybu jądra...i.. 25 Przykład W.3. Typowa preambuła macierzystej usługi systemowej... 26 Wartości zwracane przez usługi systemowe...i... 27 Względna częstość wywołań usług systemowych...i... 27 Tabela W.1. Częstość wywołań macierzystych usług systemowych... 27 O niniejszej książce...i...i... 31 "3. +o 2036 +- /7 78/ 3;/ ZwQuerySystemInformation...i... 33 ZwSetSystemInformation...i...i.. 35 SYSTEM_INFORMATION_CLASS...i... 36 SystemBasicInformation...i...i....37 SystemProcessorInformation...i... 38 SystemPerformanceInformation...i... 39 SystemTimeOfDayInformation...i... 47 SystemProcessesAndThreadsInformation...i... 48 SystemCallCounts...i...i...... 53 SystemConfigurationInformation...i... 53 SystemProcessorTimes...i...i....54 SystemGlobalFlag...i...i...... 55
' 2.3;7$+8 :/ / 7 32 SystemModuleInformation...i...i 56 SystemLockInformation...i...i...57 SystemHandleInformation...i...i. 59 SystemObjectInformation...i...i..60 SystemPagefileInformation...i... 63 SystemInstructionEmulationCounts...i... 64 SystemCacheInformation...i...i.. 64 SystemPoolTagInformation...i... 66 SystemProcessorStatistics...i...i 67 SystemDpcInformation...i...i....68 SystemLoadImage...i...i... 68 SystemUnloadImage...i...i... 69 SystemTimeAdjustment...i...i... 70 SystemCrashDumpInformation...i... 71 SystemExceptionInformation...i... 71 SystemCrashDumpStateInformation...i... 72 SystemKernelDebuggerInformation...i... 73 SystemContextSwitchInformation...i... 73 SystemRegistryQuotaInformation...i... 74 SystemLoadAndCallImage...i...i 74 SystemPrioritySeparation...i...i..75 SystemTimeZoneInformation...i... 76 SystemLookasideInformation...i... 77 SystemSetTimeSlipEvent...i...i.. 78 SystemCreateSession...i...i... 79 SystemDeleteSession...i...i... 79 SystemRangeStartInformation...i... 80 SystemVerifierInformation...i...i80 SystemAddVerifier...i...i... 80 SystemSessionProcessesInformation...i... 81 SystemPoolBlocksInformation...i... 81 SystemMemoryUsageInformation...i... 83 Przykład 1.1. Częściowa implementacja biblioteki ToolHelp... 84 Przykład 1.2. Lista otwartych uchwytów procesu...i... 88 ZwQuerySystemEnvironmentValue...i... 90 ZwSetSystemEnvironmentValue...i... 92 ZwShutdownSystem...i...i....93 ZwSystemDebugControl...i...i... 94 Przykład 1.3. Ustawianie wewnętrznego punktu przerwania... 98 Przykład 1.4. Pobieranie danych śledzenia...i... 100
#4 786/- "3. +o, / 8 Г +8+ 31 o - +7,3-2/ OBJECT_ATTRIBUTES...i...i 103 ZwQueryObject...i...i... 105 ZwSetInformationObject...i...i. 107 OBJECT_INFORMATION_CLASS...i... 108 ObjectBasicInformation...i...i...108 ObjectNameInformation...i...i.. 110 ObjectTypeInformation...i...i... 10 ObjectAllTypesInformation...i... 112 ObjectHandleInformation...i...i 113 ZwDuplicateObject...i...i... 113 ZwMakeTemporaryObject...i... 115 ZwClose...i...i... 115 Przykład 2.1. Lista otwartych uchwytów procesu...i... 116 ZwQuerySecurityObject...i...i.. 118 ZwSetSecurityObject...i...i.... 119 ZwCreateDirectoryObject...i...i 120 ZwOpenDirectoryObject...i...i. 121 ZwQueryDirectoryObject...i...i 123 ZwCreateSymbolicLinkObject...i... 124 ZwOpenSymbolicLinkObject...i... 125 ZwQuerySymbolicLinkObject...i... 126 "3. +o + ; 689+ 2+ ZwAllocateVirtualMemory...i... 129 ZwFreeVirtualMemory...i...i... 131 ZwQueryVirtualMemory...i...i. 132 MEMORY_INFORMATION_CLASS...i... 134 MemoryBasicInformation...i...i 134 MemoryWorkingSetList...i...i.. 135 MemorySectionName...i...i... 136 ZwLockVirtualMemory...i...i... 137 ZwUnlockVirtualMemory...i... 138 ZwReadVirtualMemory...i...i... 139 ZwWriteVirtualMemory...i...i.. 140 ZwProtectVirtualMemory...i...i 142 ZwFlushVirtualMemory...i...i.. 143 ZwAllocateUserPhysicalPages...i... 144 ZwFreeUserPhysicalPages...i... 145 ZwMapUserPhysicalPages...i... 146 ZwMapUserPhysicalPagesScatter...i... 148
' 2.3;7$+8 :/ / 7 32 ZwGetWriteWatch...i...i.... 149 ZwResetWriteWatch...i...i...150 "3. +o#/ - / ZwCreateSection...i...i...... 153 ZwOpenSection...i...i... 155 ZwQuerySection...i...i... 156 SECTION_INFORMATION_CLASS...i... 158 SectionBasicInformation...i...i. 158 SectionImageInformation...i...i 159 ZwExtendSection...i...i... 160 ZwMapViewOfSection...i...i... 161 ZwUnmapViewOfSection...i... 164 ZwAreMappedFilesTheSame...i... 164 "3. +o' 8 ZwCreateThread...i...i... 167 ZwOpenThread...i...i... 170 ZwTerminateThread...i...i...171 ZwQueryInformationThread...i... 172 ZwSetInformationThread...i...i 174 THREADINFOCLASS...i...i... 175 ThreadBasicInformation...i...i.. 175 ThreadTimes...i...i... 176 ThreadPriority...i...i...... 177 ThreadBasePriority...i...i... 177 ThreadAffinityMask...i...i... 177 ThreadImpersonationToken...i... 177 ThreadEnableAlignmentFaultFixup...i... 177 ThreadEventPair...i...i... 178 ThreadQuerySetWin32StartAddress...i... 178 ThreadZeroTlsCell...i...i... 179 ThreadPerformanceCount...i...i 179 ThreadAmILastThread...i...i... 179 ThreadIdealProcessor...i...i... 179 ThreadPriorityBoost...i...i... 179 ThreadSetTlsArrayAddress...i... 179 ThreadIsIoPending...i...i... 180 ThreadHideFromDebugger...i... 180 ZwSuspendThread...i...i... 180 ZwResumeThread...i...i.... 181
#4 786/- ZwGetContextThread...i...i... 182 ZwSetContextThread...i...i...183 ZwQueueApcThread...i...i... 184 ZwTestAlert...i...i...... 185 ZwAlertThread...i...i...... 186 ZwAlertResumeThread...i...i... 187 ZwRegisterThreadTerminatePort...i... 188 ZwImpersonateThread...i...i... 188 ZwImpersonateAnonymousToken...i... 189 "3. +o 63-/7 ZwCreateProcess...i...i... 191 ZwOpenProcess...i...i... 193 ZwTerminateProcess...i...i...195 ZwQueryInformationProcess...i... 196 ZwSetInformationProcess...i...i 197 PROCESSINFOCLASS...i...i.. 198 ProcessBasicInformation...i...i. 199 ProcessQuotaLimits...i...i... 200 ProcessIoCounters...i...i... 201 ProcessVmCounters...i...i.... 202 ProcessTimes...i...i... 203 ProcessBasePriority...i...i... 204 ProcessRaisePriority...i...i... 204 ProcessDebugPort...i...i... 205 ProcessExceptionPort...i...i... 205 ProcessAccessToken...i...i.... 205 ProcessDefaultHardErrorMode...i... 206 ProcessPooledUsageAndLimits...i... 206 ProcessWorkingSetWatch...i... 207 ProcessUserModeIOPL...i...i... 208 ProcessEnableAlignmentFaultFixup...i... 208 ProcessPriorityClass...i...i... 208 ProcessWx86Information...i...i 209 ProcessHandleCount...i...i.... 209 ProcessAffinityMask...i...i... 209 ProcessPriorityBoost...i...i... 210 ProcessDeviceMap...i...i... 210 ProcessSessionInformation...i... 211 ProcessForegroundInformation...i... 211 ProcessWow64Information...i... 211
' 2.3;7$+8 :/ / 7 32 RtlCreateProcessParameters...i... 212 RtlDestroyProcessParameters...i... 214 PROCESS_PARAMETERS...i... 214 RtlCreateQueryDebugBuffer...i... 218 RtlQueryProcessDebugInformation...i... 218 RtlDestroyQueryDebugBuffer...i... 220 DEBUG_BUFFER...i...i... 220 DEBUG_MODULE_INFORMATION...i... 221 DEBUG_HEAP_INFORMATION...i... 223 DEBUG_LOCK_INFORMATION...i... 224 Przykład 6.1. Rozwidlenie procesu Win32...i... 226 Przykład 6.2. Tworzenie procesu Win32...i... 230 Przykład 6.3. Rozszerzenie implementacji biblioteki ToolHelip z użyciem RtlQueryProcessDebugInformation...i... 234 "3. +o +.+2 + 3,7 ZwCreateJobObject...i...i... 241 ZwOpenJobObject...i...i... 242 ZwTerminateJobObject...i...i... 243 ZwAssignProcessToJobObject...i... 244 ZwQueryInformationJobObject...i... 245 ZwSetInformationJobObject...i... 246 JOBOBJECTINFOCLASS...i... 247 JobObjectBasicAccountingInformation...i... 247 JobObjectBasicLimitInformation...i... 249 JobObjectBasicProcessIdList...i... 251 JobObjectBasicUIRestrictions...i... 252 JobObjectSecurityLimitInformation...i... 252 JobObjectEndOfJobTimeInformation...i... 254 JobObjectAssociateCompletionPortInformation...i... 254 JobObjectBasicAndIoAccountingInformation...i... 255 JobObjectExtendedLimitInformation...i... 255 "3. +o /832 ZwCreateToken...i...i... 257 ZwOpenProcessToken...i...i... 260 ZwOpenThreadToken...i...i... 261 ZwDuplicateToken...i...i... 262 ZwFilterToken...i...i... 264 ZwAdjustPrivilegesToken...i... 265 ZwAdjustGroupsToken...i...i... 267
#4 786/- ZwQueryInformationToken...i... 268 ZwSetInformationToken...i...i.. 269 TOKEN_INFORMATION_CLASS...i... 270 TokenUser...i...i...... 271 TokenGroups i TokenRestrictedSids...i... 271 TokenPrivileges...i...i... 272 TokenOwner...i...i... 272 TokenPrimaryGroup...i...i...273 TokenDefaultDacl...i...i... 273 TokenSource...i...i... 273 TokenType...i...i...... 274 TokenImpersonationLevel...i... 274 TokenStatistics...i...i...... 274 TokenSessionId...i...i...... 276 Przykład 8.1. Tworzenie okna poleceń dla użytkownika SYSTEM... 276 "3. +o # 2-632 +- + ZwWaitForSingleObject...i...i.. 279 ZwSignalAndWaitForSingleObject...i... 280 ZwWaitForMultipleObjects...i... 281 ZwCreateTimer...i...i...... 283 ZwOpenTimer...i...i...... 284 ZwCancelTimer...i...i... 285 ZwSetTimer...i...i... 286 ZwQueryTimer...i...i... 287 TIMER_INFORMATION_CLASS...i... 289 TimerBasicInformation...i...i...289 ZwCreateEvent...i...i... 289 ZwOpenEvent...i...i... 291 ZwSetEvent...i...i...... 292 ZwPulseEvent...i...i... 292 ZwResetEvent...i...i...... 293 ZwClearEvent...i...i... 294 ZwQueryEvent...i...i...... 295 EVENT_INFORMATION_CLASS...i... 296 EventBasicInformation...i...i...296 ZwCreateSemaphore...i...i...297 ZwOpenSemaphore...i...i... 298 ZwReleaseSemaphore...i...i... 299 ZwQuerySemaphore...i...i... 300 SEMAPHORE_INFORMATION_CLASS...i... 301
' 2.3;7$+8 :/ / 7 32 SemaphoreBasicInformation...i... 301 ZwCreateMutant...i...i... 302 ZwOpenMutant...i...i... 303 ZwReleaseMutant...i...i... 304 ZwQueryMutant...i...i... 305 MUTANT_INFORMATION_CLASS...i... 306 MutantBasicInformation...i...i.. 306 ZwCreateIoCompletion...i...i... 307 ZwOpenIoCompletion...i...i... 308 ZwSetIoCompletion...i...i....309 ZwRemoveIoCompletion...i...i 310 ZwQueryIoCompletion...i...i... 312 IO_COMPLETION_INFORMATION_CLASS...i... 313 IoCompletionBasicInformation...i... 313 ZwCreateEventPair...i...i... 313 ZwOpenEventPair...i...i... 314 ZwWaitLowEventPair...i...i... 315 ZwWaitHighEventPair...i...i... 316 ZwSetLowWaitHighEventPair...i... 317 ZwSetHighWaitLowEventPair...i... 318 ZwSetLowEventPair...i...i...318 ZwSetHighEventPair...i...i...319 "3. +o+8+ 13. 2+ ZwQuerySystemTime...i...i... 321 ZwSetSystemTime...i...i....322 ZwQueryPerformanceCounter...i... 323 ZwSetTimerResolution...i...i... 323 ZwQueryTimerResolution...i... 324 ZwDelayExecution...i...i....325 ZwYieldExecution...i...i... 326 ZwGetTickCount...i...i... 327 "3. +o 630 3;+2 /; 32+2 + KPROFILE_SOURCE...i...i... 329 ZwCreateProfile...i...i...... 329 ZwSetIntervalProfile...i...i... 331 ZwQueryIntervalProfile...i...i...332 ZwStartProfile...i...i...... 333 ZwStopProfile...i...i...... 333 Przykład 11.1. Profilowanie jądra...i... 334
#4 786/- "3. +o 368 PORT_MESSAGE...i...i... 337 PORT_SECTION_WRITE...i... 339 PORT_SECTION_READ...i... 340 ZwCreatePort...i...i...... 341 ZwCreateWaitablePort...i...i... 342 ZwConnectPort...i...i... 343 ZwSecureConnectPort...i...i... 345 ZwListenPort...i...i... 346 ZwAcceptConnectPort...i...i... 347 ZwCompleteConnectPort...i...i 349 ZwRequestPort...i...i...... 349 ZwRequestWaitReplyPort...i... 350 ZwReplyPort...i...i...... 351 ZwReplyWaitReplyPort...i...i.. 352 ZwReplyWaitReceivePort...i... 353 ZwReplyWaitReceivePortEx...i... 354 ZwReadRequestData...i...i... 355 ZwWriteRequestData...i...i... 357 ZwQueryInformationPort...i...i 358 PORT_INFORMATION_CLASS...i... 359 PortBasicInformation...i...i... 359 ZwImpersonateClientOfPort...i... 360 Przykład 12.1. Przyłączanie do portu nazwanego...i... 360 "3. +o ZwCreateFile...i...i... 365 ZwOpenFile...i...i... 368 ZwDeleteFile...i...i... 371 ZwFlushBuffersFile...i...i... 371 ZwCancelIoFile...i...i... 372 ZwReadFile...i...i...... 373 ZwWriteFile...i...i...... 375 ZwReadFileScatter...i...i... 376 ZwWriteFileGather...i...i... 378 ZwLockFile...i...i...... 380 ZwUnlockFile...i...i... 382 ZwDeviceIoControlFile...i...i... 383 ZwFsControlFile...i...i...... 385 ZwNotifyChangeDirectoryFile...i... 387 FILE_NOTIFY_INFORMATION...i... 389
' 2.3;7$+8 :/ / 7 32 ZwQueryEaFile...i...i...... 389 ZwSetEaFile...i...i...... 391 FILE_FULL_EA_INFORMATION...i... 392 FILE_GET_EA_INFORMATION...i... 393 ZwCreateNamedPipeFile...i...i. 394 ZwCreateMailslotFile...i...i....396 ZwQueryVolumeInformationFile...i... 398 ZwSetVolumeInformationFile...i... 399 FS_INFORMATION_CLASS...i... 400 FileFsVolumeInformation...i... 401 FileFsLabelInformation...i...i...402 FileFsSizeInformation...i...i... 402 FileFsDeviceInformation...i...i. 403 FileFsAttributeInformation...i... 404 FileFsControlInformation...i...i 405 FileFsFullSizeInformation...i... 405 FileFsObjectIdInformation...i... 406 ZwQueryQuotaInformationFile...i... 407 ZwSetQuotaInformationFile...i... 408 FILE_USER_QUOTA_INFORMATION...i... 410 FILE_QUOTA_LIST_INFORMATION...i... 411 ZwQueryAttributesFile...i...i...411 ZwQueryFullAttributesFile...i... 412 ZwQueryInformationFile...i...i. 413 ZwSetInformationFile...i...i.... 414 ZwQueryDirectoryFile...i...i... 415 ZwQueryOleDirectoryFile...i... 417 FILE_INFORMATION_CLASS...i... 419 FileDirectoryInformation...i...i.420 FileFullDirectoryInformation...i... 422 FileBothDirectoryInformation...i... 424 FileBasicInformation...i...i... 426 FileStandardInformation...i...i..427 FileInternalInformation...i...i.. 428 FileEaInformation...i...i...... 428 FileAccessInformation...i...i.... 429 FileNameInformation...i...i...429 FileRenameInformation i FileLinkInformation...i... 430 FileNamesInformation...i...i...430 FileDispositionInformation...i... 431 FilePositionInformation...i...i...432 FileModeInformation...i...i....432
#4 786/- FileAlignmentInformation...i... 432 FileAllInformation...i...i...... 433 FileAllocationInformation...i... 433 FileEndOfFileInformation...i... 434 FileStreamInformation...i...i....434 FilePipeInformation...i...i... 435 FilePipeLocalInformation...i...i 436 FilePipeRemoteInformation...i... 437 FileMailslotQueryInformation...i... 437 FileMailslotSetInformation...i... 438 FileCompressionInformation...i... 439 FileObjectIdInformation...i...i..440 FileCompletionInformation...i... 440 FileMoveClusterInformation...i... 440 FileQuotaInformation...i...i... 440 FileReparsePointInformation...i... 441 FileNetworkOpenInformation...i... 441 FileAttributeTagInformation...i... 442 Przykład 13.1. Otwieranie pliku określonego identyfikatorem... 443 "3. +o 9- /"/ /7869 ZwCreateKey...i...i...... 445 ZwOpenKey...i...i...... 447 ZwDeleteKey...i...i...... 448 ZwFlushKey...i...i...... 449 ZwSaveKey...i...i...... 449 ZwSaveMergedKeys...i...i... 450 ZwRestoreKey...i...i... 451 ZwLoadKey...i...i... 452 ZwLoadKey2...i...i... 453 ZwUnloadKey...i...i...... 454 ZwQueryOpenSubKeys...i...i... 455 ZwReplaceKey...i...i...... 456 ZwSetInformationKey...i...i... 457 KEY_SET_INFORMATION_CLASS...i... 458 KeyWriteTimeInformation...i... 458 ZwQueryKey...i...i... 459 ZwEnumerateKey...i...i... 460 KEY_INFORMATION_CLASS...i... 461 KeyBasicInformation...i...i.... 461 KeyNodeInformation...i...i...462
' 2.3;7$+8 :/ / 7 32 KeyFullInformation...i...i... 463 KeyNameInformation...i...i... 464 ZwNotifyChangeKey...i...i... 465 ZwNotifyChangeMultipleKeys...i... 467 ZwDeleteValueKey...i...i...469 ZwSetValueKey...i...i... 470 ZwQueryValueKey...i...i...471 ZwEnumerateValueKey...i...i.. 473 KEY_VALUE_INFORMATION_CLASS...i... 474 KeyValueBasicInformation...i... 474 KeyValueFullInformation i KeyValueFullInformationAlign64... 475 KeyValuePartialInformation...i... 476 ZwQueryMultipleValueKey...i... 477 KEY_VALUE_ENTRY...i...i.. 479 ZwInitializeRegistry...i...i... 479 "3. +o +,/ 4 /- /2 + 274/ - + +9. 8 21 ZwPrivilegeCheck...i...i... 481 ZwPrivilegeObjectAuditAlarm...i... 482 ZwPrivilegedServiceAuditAlarm...i... 483 ZwAccessCheck...i...i... 485 ZwAccessCheckAndAuditAlarm...i... 486 ZwAccessCheckByType...i...i.. 488 ZwAccessCheckByTypeAndAuditAlarm...i... 490 ZwAccessCheckByTypeResultList...i... 493 ZwAccessCheckByTypeResultListAndAuditAlarm...i... 495 ZwAccessCheckByTypeResultListAndAuditAlarmByHandle... 497 ZwOpenObjectAuditAlarm...i... 500 ZwCloseObjectAuditAlarm...i... 502 ZwDeleteObjectAuditAlarm...i... 503 "3. +o 91+2. + +6. +2 //2/61 ZwRequestWakeupLatency...i... 505 ZwRequestDeviceWakeup...i... 506 ZwCancelDeviceWakeupRequest...i... 507 ZwIsSystemResumeAutomatic...i... 508 ZwSetThreadExecutionState...i... 508 ZwGetDevicePowerState...i...i. 509 ZwSetSystemPowerState...i...i. 510 ZwInitiatePowerAction...i...i...512 ZwPowerInformation...i...i...513
#4 786/- POWER_INFORMATION_LEVEL...i... 515 SystemPowerPolicyAc, SystemPowerPolicyDc, SystemPowerPolicyCurrent... 515 SystemPowerCapabilities...i...i 516 SystemBatteryState...i...i... 516 SystemPowerStateHandler...i... 516 ProcessorStateHandler...i...i.... 517 AdministratorPowerPolicy...i... 517 ProcessorInformation...i...i... 517 SystemPowerInformation...i...i 517 ZwPlugPlayControl...i...i... 518 ZwGetPlugPlayEvent...i...i... 519 "3. +o 22/97o91 7 78/ 3;/ ZwRaiseException...i...i... 521 ZwContinue...i...i... 522 ZwW32Call...i...i...... 523 ZwCallbackReturn...i...i... 524 ZwSetLowWaitHighThread...i... 526 ZwSetHighWaitLowThread...i... 527 ZwLoadDriver...i...i... 527 ZwUnloadDriver...i...i... 528 ZwFlushInstructionCache...i...i 529 ZwFlushWriteBuffer...i...i....530 ZwQueryDefaultLocale...i...i... 530 ZwSetDefaultLocale...i...i....531 ZwQueryDefaultUILanguage...i... 532 ZwSetDefaultUILanguage...i... 533 ZwQueryInstallUILanguage...i... 533 ZwAllocateLocallyUniqueId...i... 534 ZwAllocateUuids...i...i... 535 ZwSetUuidSeed...i...i... 536 ZwRaiseHardError...i...i... 537 ZwSetDefaultHardErrorPort...i... 538 ZwDisplayString...i...i...... 539 ZwCreatePagingFile...i...i... 540 ZwAddAtom...i...i... 541 ZwFindAtom...i...i...... 542 ZwDeleteAtom...i...i...... 543 ZwQueryInformationAtom...i... 543 ATOM_INFORMATION_CLASS...i... 545 AtomBasicInformation...i...i... 545
' 2.3;7$+8 :/ / 7 32 AtomListInformation...i...i.... 545 ZwSetLdtEntries...i...i... 546 ZwVdmControl...i...i... 547 Nie zaimplementowane usługi systemowe...i... 548 3.+8/ ' ;3o ;+2 /97o917 78/ 3; - 86,9.6+ Przykład A.1. Implementacja NtQueryEvent dla trybu jądra... 555 Przykład A.2. Dynamiczne wiązanie z ntdll.dll...i... 556 3.+8/ 92 8 ;/ - +86,9.6+2+4 +8036 / 28/ KiTrap03...i...i...... 559 KiTrap04...i...i...... 560 KiGetTickCount...i...i...... 560 KiCallbackReturn...i...i... 560 KiSetLowWaitHighThread...i... 560 KiDebugService...i...i...... 560 KiSystemService...i...i...... 561 3.+8/ ' 8./,9113;+2 / 3.9 Przykład C.1. Pseudokod procedury KiDispatchException... 563 Przykład C.2. Pseudokod procedury KiUserExceptionDispatcher... 566 Debugger trybu jądra...i...i... 566 Przykład C.3. Pseudokod procedury DebugService...i... 567 Debuggery trybu jądra...i...i... 568 DEBUG_MESSAGE...i...i... 568 Przekazywanie komunikatów debuggowania...i... 569 Konsekwencje mechanizmu przekazywania komunikatów... 569 OutputDebugString...i...i... 570 Śledzenie wywołań procedur eksportowanych bibliotek DLL... 570 Przykład C.4. Narzędzie śledzenia...i... 570 3.+8/ #869 896+. 7 9$# NTFS_RECORD_HEADER...i... 581 FILE_RECORD_HEADER...i... 582 ATTRIBUTE...i...i... 584 RESIDENT_ATTRIBUTE...i... 585 NONRESIDENT_ATTRIBUTE...i... 586 AttributeStandardInformation...i... 587 AttributeAttributeList...i...i... 589 AttributeFileName...i...i... 590
#4 786/- AttributeObjectId...i...i...... 592 AttributeSecurityDescriptor...i... 593 AttributeVolumeName...i...i... 593 AttributeVolumeInformation...i... 593 AttributeData...i...i... 594 AttributeIndexRoot...i...i... 594 AttributeIndexAllocation...i...i.595 DIRECTORY_INDEX...i...i... 596 DIRECTORY_ENTRY...i...i... 596 AttributeBitmap...i...i... 597 AttributeReparsePoint...i...i... 598 AttributeEaInformation...i...i.... 598 AttributeEA...i...i...... 599 AttributePropertySet...i...i... 600 AttributeLoggedUtilityStream...i... 600 Pliki specjalne...i...i...... 600 Otwieranie plików specjalnych...i... 602 Przywracanie danych plików usuniętych...i... 603 Przykład D.1. Odzyskiwanie danych z pliku...i... 603 Przykład D.2. Dekompresowanie odzyskanych danych...i... 609 # 363;.
Usługi systemowe, które opisujemy w tym rozdziale, wykonują operacje dotyczące pamięci wirtualnej. Alokuje pamięć wirtualną w zakresie adresowym trybue użytkownika. $# # $#$$%# $ ; 3-+8/& 689+ / 36 63-/77 +2. /Г %$ & +7/..6/77Г % /63 87Г %$ % 3-+8 32# /Г % 3-+8 32$ 4/Г % 638/-8 +6+ /86 63-/77 +2. / Uchwyt obiektu typu proces, reprezentujący proces, dla którego zaalokowana zostanie pamięć. Wymagany jest dostęp "##)& ) "$. +7/..6/77 Wskaźnik do zmiennej, w której umieszczony zostanie adres bazowy zaalokowanego obszaru pamięci. Jeżeli przy wywołaniu parametr ten nie jest pusty, początkiem alokacji będzie wskazany adres, zaokrąglony (gdy jest taka potrzeba) do enajbliższego progu ziarnistości alokacji.
' 2.3;7$+8 :/ / 7 32 /63 87 Określa liczbę starszych bitów adresu, które muszą pozostać równe zeru w adresie bazowym alokowanej pamięci. Wartość tego parametru musi być mniejsza od 21. Stosowana wyłącznie, gdy system operacyjny określa adres alokacji (parameetr +7/.6/77 pozostaje pusty) 3-+8 32# / Wskaźnik do zmiennej określającej rozmiar alokacji w bajtach. Po zakończeniu procedury wielkość obszaru faktycznie zaalokowanego. Jeżeli wartość +7/..6/77 pozostała pusta, rozmiar alokacji może zostać powiększony odpowiednio do wielkości strony. W pozostałych przypadkach wartość 3-+8 32# / obejmuje wszystkie strony, w których znajduje się jeden lub więcej bajtów z zakresu od +7/..6/77 do +7/..6/77 3-+8 32# /. 3-+8 32$ 4/ Zestaw znaczników opisujących wykonywaną operację alokowania zakresu stron. Stosowane są wybrane kombinacje znaczników: 638/-8 ) $ 3 3;+2 /4+ - )"#"& "/ /6;3;+2 /,/ + 3 3;+2 + )"#$ 2+- /2 /.+2 - + 32 /+ 8.9+ 2 - )$ )' % - /2+ ; 7 /13.378 42/13+.6./79 )'" $)'$ ~ /. /2 /34/6+- +4 79.3.4+ - ) # $;36 /2 /;.3 94+ - 0-2/ Określa poziom ochrony alokowanych stron. Wartości poniższej listy można łączyć z ) %" lub ) : )## )" )"'" $ ) %$ ) %$)" ) %$)"'" $ ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#)) ", #$$%#) $ ) "##, #$$%#) " ) $, #$$%#) & ) ) "$$ lub #$$%#) "##) #) $" $. 92 - /' 2 & 689+ 3-, & 689+ 3-.
"3. +o + ; 689+ 2+ %;+1 Prawie wszystkie wywołania ; 3-+8/& 689+ / 36 może zrealizować funkcja & 689+ 3-. Przy alokowaniu pamięci wymagane jest jej wcześniejsze zarezerwowanie lub uwzględnienie w parametrze 3-+8 32$ 4/ zarówno znacznika ) $, jak i )"#"& (niezależnie od możliwości łączenia ich z )$ )'). Znacznik )"#$ został opisany w artykule Microsoft Knowledge Base Q162104 oraz nowszych wersjach Platform SDK. Znacznik )'" $)'$ dostępny jest wyłącznie w Windows 2000. Jeżeli skorzystamy z niego w systemie, który nie obsługuje śledzenia operacji zapisu, procedura nie wykonuje żadnej operacji i zwraca kod błędu #$$%#)$)#% "$. Również znacznik ) # dostępny jest tylko w Windows 2000. Występuje on wyłącznie w połączeniu z )"#"& (i żadnym innym). Powoduje, że zarezerwowany zostaje zakres adresów wirtualnych, które zostaną wykorzystane do mapowania widoków pamięci fizycznej alokowanych procedurą ; 3-+8/%7/6 7 -+ +1/7. Zwalnia pamięć wirtualną w zakresie adresowym trybue użytkownika. $# # $#$$%# $ ;6//& 689+ / 36 63-/77 +2. /Г %$ & +7/..6/77Г %$ % 6//# /Г % 6//$ 4/ +6+ /86 63-/77 +2. / Uchwyt obiektu typu proces, reprezentujący proces, którego pamięć zostanie zwolniona. Wymagany jest dostęp "##)& ) "$. +7/..6/77 Wskaźnik do zmiennej określającej adres bazowy zwalnieanego obszaru pamięci.
' 2.3;7$+8 :/ / 7 32 6//# / Wskaźnik do zmiennej, która określa (w bajtach) ilość zwalnianej pamięci i w której, po wykonaniu operacji, umieszczana jest informacja o liczbie bajtów faktycznie zwolnionych. Jeżeli wartością 6//$ 4/ jest )" #, 6//# / musi zawierać 0. 6//$ 4/ Zestaw znaczników opisujących wykonywaną operację zwalniania zakresu stron. Stosowane są wybrane kombinacje znaczników. ) $ ;+ 2 ++ /43 378+; +6/ /6;+- )" # ;+ 2 + 6 ;2 / 6/ /6;+- / ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#)% )$)")&, #$$%#)% )$) $)#$, #$$%#)")& )$)$)#, #$$%#) " )$) $ lub #$ $%#) "##) #)$" $. 92 - /' 2 & 689+ 6//, & 689+ 6//. %;+1 Prawie wszystkie wywołania ;6//& 689+ / 36 może zrealizować funkcja & 689+ 6//. Pobiera informacje o pamięci wirtualnej w zakresie aedresowym trybu użytkownika. $# # $#$$%# $ ;!9/6 & 689+ / 36 63-/77 +2. /Г & +7/..6/77Г " ) " $ ) ## / 36 2036 +8 32 +77Г %$ & / 36 2036 +8 32Г % / 36 2036 +8 32 /218 Г %$ % "/8962 /218 $
"3. +o + ; 689+ 2+ +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego pamięci będą dotyczyć zwracane informacje. Wymagany jest dostęp "##)!%" ) " $. +7/..6/77 Wskaźnik do zmiennej określającej adres bazowy obszaru pamięci, którego dotyczyć będą zwracane informacje. Wartość zaokrąglana w dół do wielokrotności rozmiaru strony. Jeżeli pobierana klasa informacji nie jest związana z zakreesem adresów, parametr może mieć wartość 0. / 36 2036 +8 32 +77 Rodzaj pobieranych informacji o pamięci wirtualnej. Listę dopuszczalnych wartości parametru określa wyliczenie " ) " $ ) ##, które opisujemy na kolejnych stronach. / 36 2036 +8 32 Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczone zostaną odpowiednie dane o pamięci wirtualnej. / 36 2036 +8 32 /218 Określa wielkość / 36 2036 +8 32 w bajtach. Musi być odpowiednia dla klasy informacji, określonej przez / 36 2036 +8 32 +77. "/8962 /218 Opcjonalny wskaźnik do zmiennej, w której umieszczana jest liczba bajtów faktycznie zwracanych parametrem / 36 2036 +8 32, o ile wywołanie jest udane. Jeżeli informacja ta nie jest potrzebna, można użyć wskaźnika pustego. ;6+-+2+;+683 Zwraca #$$%#)#%## albo kod błędu w rodzaju #$$%#) & ) ) ##, #$$%#) ) $ ) # $, #$$%#) & )"##, #$$%#) ) & lub #$$%#) "##) #) $" $. 92 - /' 2 & 689+!9/6, & 689+!9/6.
' 2.3;7$+8 :/ / 7 32 %;+1 Nie ma. 8 4/./0/29 ) " ) " $ ) ## / 36 +7-2036 +8 32Г / 36 '36 21#/8 78Г / 36 #/-8 32+ /Г / 36 +7 -& 2036 +8 32 " ) " $ ) ## 8 4/./07869-8) " )# ) " $ 2036 +8 32.+77 & +7/..6/77 & 3-+8 32+7/ '" 3-+8 32 638/-8 # )$"/1 32# / '"#8+8/ '" 638/-8 '"$ 4/ " )# ) " $ Г " )# ) " $ / /28 +7/..6/77 Wirtualny adres bazowy obszaru pamięci, którego doteyczy zapytanie. 3-+8 32+7/ Wirtualny adres bazowy alokowanego wcześniej obszarue pamięci, który obejmuje badany obszar. 3-+8 32 638/-8 Poziom ochrony stron, określony przy alokowaniu obszaru. Wartości poniższej listy mogą być łączone z )%" lub ) : )## )" )"'" $ ) %$ ) %$)" ) %$)"'" $
"3. +o + ; 689+ 2+ "/1 32# / #8+8/ Wielkość (w bajtach) obszaru, który zaczyna się od adresu bazowego alokowanego wcześniej obszaru pamięci, w którym wszystkie strony mają ideentyczne atrybuty ochrony i stanu. Stan stron obszaru. Wykorzystuje się wymienione niżeje wartości. 638/-8 $ 4/ ) $ + +6/ /6;3;+2+ ++ 3 3;+2+ )"#"& + +6/ /6;3;+2+Г2 / ++ 3 3;+2+ )" + ;3 2+ Bieżący poziom ochrony stron obszaru. Typ stron w obszarze. )" odpowiada wartość 0. Pozostałe wyliczono niżej. ) " &$ + 46 ;+82+ ) + 43. /1+ -+;74 o9 8 3;+2 9Г +43;+2+ 7/. -.+2 - ) + 43. /1+ -+;74 o9 8 3;+2 9Г +43;+2+ 7/. - 3,6+ 9 %;+1 Struktura " )# ) " $ jest identyczna ze strukturą o tej samej nazwie, zwracaną przez funkcję Win32 & 689+!9/6. 8 4/./07869-8) " )'" )#$) #$ 2036 +8 32 +77. % 9,/60 +1/7 % '36 21#/8 78 " )'" )#$) #$Г " )'" )#$) #$ / /28 9,/60 +1/7 Liczba stron na liście zestawu roboczego. '36 21#/8 78 Tablica wpisów stron zestawu roboczego. 20 starszych bitów wpisu odpowiada wirtualnemu adresowi strony, 20 młodszych to maska znaczników. Zdeefiniowane zostały poniżej.
' 2.3;7$+8 :/ / 7 32 '# ) )" #8632+8 3.3 3.- 89 '# ) ) %$ #8632+ 3./ ; 32 ;+ 2 '# ) )"'" $ #8632+ +4 7 ;+ 2+ '# ) ) %$)" '# ) )'" $ #8632+ 34 3;+2+46. +4 7 / -34 32 ;6 8/ '# ) ) %$)"'" $ '# ) ) %$)'" $ #8632+ 34 3;+2+43 +4. 7 / '# ) )# ")%$) # '# ) )# " #8632+ /;74 o9 8 3;+2./ %;+1 Procedura ;!9/6 & 689+ / 36 z klasą / 36 '36 21#/8 78 zawsze zwraca #$$%#)#% ##. Faktycznym potwierdzeniem udanej operacji pobrania danych jest upewnienie się, że wartość / 36 2036 +8 32 /218 jest większa od "/8962 /218. Bity znaczników niewykorzystywanych nie są ani ustawiane, ani zerowane. Zaleca się więc, przed wywołaniem ;!9/6 & 689+ / 36, wypełnić bufor / 36 2036 +8 32 zerami. Lista zestawu roboczego procesu obejmuje również informację o tym, czy strona jest zablokowana (w pamięci lub zestawie roboczym). Nie jest zwraecana w opisywanej tu strukturze. Klasę / 36 '36 21#/8 78 wykorzystuje funkcja PSAPI!9/6 '36 21#/8. '# ) )# ")%$) # to element dostępny wyłącznie w Windows 2000. Wartość 7 oznacza, że stronę współużytkuje co najmniej siedem eprocesów. 8 4/./07869-8) " )#$ ) 2036 +8 32 +77. % )#$" #/-8 32 /+ / " )#$ ) Г " )#$ ) / /28 #/-8 32 /+ / Nazwa mapowanego pliku. %;+1 Parametr +7/..6/77 musi wskazywać adres bazowy mapowanej sekcji danych. Nie zostanie zwrócona nazwa mapowanej sekcji obrazu (jest to, jak się zdaje, ograniczenie możliwości procedury).
"3. +o + ; 689+ 2+ W strukturze / 36 2036 +8 32 umieszczana jest zarówno struktura % )#$", jak i sam ciąg. Z klasy korzysta funkcja PSAPI /8 +44/. /+ /. Blokuje pamięć wirtualną zakresu adresowego trybu użytkownika, zapewniając, że kolejne operacje dostępu do obszaru nie wywołają błędów stronye. $# # $#$$%# $ ; 3- & 689+ / 36 63-/77 +2. /Г %$ & +7/..6/77Г %$ % 3- # /Г % 3- $ 4/ +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego pamięć zostanie zablokowana. Wymagany jest dostęp "##)& ) "$. +7/..6/77 Wskaźnik do zmiennej określającej adres bazowy blokowanej pamięci wirtualnej. Zostaje w niej zwrócony adres bazowy pamięci faktycznie zabelokowanej. 3- # / Wskaźnik do zmiennej określającej wielkość obszaru pamięci wirtualnej, który zostanie zablokowany. Procedura zwraca w niej wielkość obszaru fakteycznie zablokowanego. 3- $ 4/ Zestaw znaczników opisujących wykonywaną operację blokowania stron. Można łączyć następujące: )& ) )'# 3 3;+2 /786322+ - / /78+;963.,3- /13 )& ) )" 3 3;+2 /78632;4+ - 0-2/
' 2.3;7$+8 :/ / 7 32 ;6+-+2+;+683 Zwraca #$$%#)#%##, #$$%#)'#) lub kod błędu, na przykład, #$$%#) " & ) $), #$$%#)'" )#$)!%$ lub #$$%#) "##) #)$" $. 92 - /' 2 & 689+ 3-. %;+1 Blokowanie stron w pamięci fizycznej wymaga uprawnieenia #/ 3- / 36 6 : /1/. Blokowane są wszystkie strony zawierające jeden lub więcej bajtów z zakresu od +7/..6/77 do +7/..6/77 3- # /. Odblokowuje pamięć wirtualną zakresu adresowego tryebu użytkownika. $# # $#$$%# $ ;%2 3- & 689+ / 36 63-/77 +2. /Г %$ & +7/..6/77Г %$ % 3- # /Г % 3- $ 4/ +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego pamięć zostanie odblokowana. Wymagany jest dostęp "##)& ) "$. +7/..6/77 Wskaźnik do zmiennej określającej adres bazowy odblokowywanej pamięci wirtualnej. Zostaje w niej zwrócony adres bazowy pamięci faktycznie odbelokowanej. 3- # / Wskaźnik do zmiennej określającej wielkość obszaru pamięci wirtualnej, który zostanie odblokowany. Procedura zwraca w niej wielkość obszaru fakteycznie odblokowanego.
"3. +o + ; 689+ 2+ 3- $ 4/ Zestaw znaczników opisujących wykonywaną operację. Moeżna łączyć następujące: )& ) )'#., 3 3;+2 /78632 78 /78+;963.,3- /13 )& ) )"., 3 3;+2 /78632;4+ - 0-2/. ;6+-+2+;+683 Zwraca #$$%#)#%## albo kod błędu w rodzaju #$$%#) " & )$), #$$%#)$) lub #$$%#) "##) #)$" $. 92 - /' 2 & 689+ %2 3-. %;+1 Odblokowanie stron w pamięci fizycznej wymaga uprawneienia #/ 3- / 36 6 : /1/. Odblokowane zostają wszystkie strony zawierające jeden lub więcej bajtów z zakresu od +7/..6/77 do +7/..6/77 3- # /. Wymagane jest, aby każda z nich została uprzednio zablokowana. Przeprowadza operację odczytu pamięci wirtualnej zakresu adresowego trybu użytkownika, należącej do innego procesu. $# # $#$$%# $ ;"/+.& 689+ / 36 63-/77 +2. /Г & +7/..6/77Г %$ & 900/6Г % 900/6 /218 Г %$ % "/8962 /218 $ +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego pamięci dotyczy operacja. Wymagany jest dostęp "##)& )".
' 2.3;7$+8 :/ / 7 32 +7/..6/77 900/6 Adres bazowy odczytywanej pamięci wirtualnej. Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczona zostanie odczytana zawartość pamięci. 900/6 /218 Rozmiar bufora 900/6 w bajtach i liczba pobieranych bajtów pamięci wirtuealnej. "/8962 /218 Opcjonalny wskaźnik do zmiennej, w której umieszczana jest liczba bajtów faktycznie zwracanych parametrem 900/6, o ile wywołanie jest udane. Jeżeli informacja ta nie jest potrzebna, można użyć wskaźnika pustego. ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#)##)& $ lub #$$%#) "##) #)$" $. 92 - /' 2 "/+. 63-/77 / 36. %;+1 Funkcjonalnym odpowiednikiem procedury ;"/+.& 689+ / 36 jest funkcja Win32 "/+. 63 -/77 / 36. Przeprowadza operację zapisu do pamięci wirtualnej zakresu adresowego trybu użytkownika, należącej do innego procesu. $# # $#$$%# $ ;'6 8/& 689+ / 36 63-/77 +2. /Г & +7/..6/77Г & 900/6Г
"3. +o + ; 689+ 2+ % 900/6 /218 Г %$ % "/8962 /218 $ +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego pamięci dotyczy operacja. Wymagany jest dostęp "##)& )'" $. +7/..6/77 900/6 Adres bazowy zapisywanej pamięci wirtualnej. Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczone są zapisywane dane. 900/6 /218 Rozmiar bufora 900/6 w bajtach i liczba zapisywanych bajtów. "/8962 /218 Opcjonalny wskaźnik do zmiennej, w której umieszczana jest liczba bajtów faktycznie odczytanych ze zmiennej 900/6, o ile wywołanie jest udane. Jeżeli informacja ta nie jest potrzebna, można użyć wskaźnika pustego. ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#)##)& $ lub #$$%#) "##) #)$" $. 92 - /' 2 '6 8/ 63-/77 / 36. %;+1 Funkcjonalnym odpowiednikiem procedury ;'6 8/& 689+ / 36 jest funkcja Win32 '6 8/ 63-/77 / 36.
' 2.3;7$+8 :/ / 7 32 Funkcja '6 8/ 63-/77 / 36 podejmuje próbę zmiany poziomu ochrony pamięci wirtualnej, aby zapewnić dostęp z prawem zapisu. Po wykonaniu operacji opróżnia pamięć podręczną instrukcji (wywołując ; 97 27869-8 32+- /). Zmienia poziom ochrony pamięci wirtualnej w zakresiee adresowym trybu użytkownika. +6+ /86 63-/77 +2. / $# # $#$$%# $ ; 638/-8& 689+ / 36 63-/77 +2. /Г %$ & +7/..6/77Г %$ % 638/-8# /Г % /; 638/-8Г %$ %. 638/-8 Uchwyt reprezentujący proces, którego pamięci dotyczy operacja. Wymagany jest dostęp "##)& ) "$. +7/..6/77 Wskaźnik do zmiennej określającej adres bazowy obszaru pamięci, którego dotyczy operacja. Procedura umieszcza w niej adres bazowy obszaru, dla którego poziom ochrony faktycznie został ustawiony. 638/-8# / Wskaźnik do zmiennej określającej w bajtach wielkość obszaru pamięci wirtualnej, której dotyczy operacja. Procedura umieszcza w niej wielkość obszaru, dla którego poziom ochrony faktycznie został ustawiony. /; 638/-8 Nowy poziom ochrony stron. Wartości poniższej listy mogą być łączone z )%" lub ) : )## )" )"'" $ )'" $ ) %$ ) %$)" ) %$)"'" $ ) %$)'" $
"3. +o + ; 689+ 2+. 638/-8 Wskaźnik do zmiennej, w której umieszczana jest informacja o wcześniejszym poziomie ochrony pierwszej strony ze wskazanego obszaru. ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#)$) $ lub #$$%#) "##) #)$" $. 92 - /' 2 & 689+ 638/-8, & 689+ 638/-8. %;+1 Funkcjonalnym odpowiednikiem procedury ; 638/-8& 689+ / 36 jest funkcja Win32 & 6 89+ 638/-8. Opróżnia mapowaną do pliku pamięć wirtualną w zakreseie adresowym trybu użytkownika. $# # $#$$%# $ ; 97 & 689+ / 36 63-/77 +2. /Г %$ & +7/..6/77Г %$ % 97 # /Г %$ )#$$%#) 3#8+897 3- +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego pamięci dotyczy operacja. Wymagany jest dostęp "##)& ) "$. +7/..6/77 Wskaźnik do zmiennej określającej adres bazowy obszaru pamięci, którego dotyczy operacja. Procedura umieszcza w niej adres bazowy obszaru, który faktycznie został opróżniony. Adres powinien wskazywać obszar mapowany do sekcji danyche pliku.
' 2.3;7$+8 :/ / 7 32 97 # / Wskaźnik do zmiennej określającej w bajtach wielkość obszaru pamięci wirtualnej, który powinien zostać opróżniony i zwracającej informację o rozmiarze obszaru, dla którego operacja faktycznie została wykonana. Jeżeli początkową wartością FlushSize jest 0, opróżniany jest zakres od BaseAddress do końca sekcji. 3#8+897 3- Wskaźnik do zmiennej, w której umieszczany jest kod stanu operacji we-wy wymaganej do opróżnienia pamięci wirtualnej (o ile jest wykonywanea). ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#)$) )$ lub #$$%#) "##) #)$" $. 92 - /' 2 97 & /;0 /. %;+1 Nie ma. Alokuje strony pamięci fizycznej. $# # $#$$%# $ ; 3-+8/%7/6 7 -+ +1/7 63-/77 +2. /Г % 9,/60 +1/7Г %$ % +1/6+ /9,/67 +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, dla którego strony będą alokowane. Wymagany jest dostęp "##)& ) "$.
"3. +o + ; 689+ 2+ 9,/60 +1/7 Wskaźnik do zmiennej określającej liczbę stron pamięcei fizycznej do zaalokowania. +1/6+ /9,/67 Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczone zostaną numery ramek alokowanych stron. ;6+-+2+;+683 Zwraca #$$%#)#%## albo kod błędu w rodzaju #$$%#) " & )$) lub #$$%#) "##) #)$" $. 92 - /' 2 3-+8/%7/6 7 -+ +1/7. %;+1 Alokowanie stron pamięci fizycznej wymaga uprawnieneia #/ 3- / 36 6 : /1/. Funkcjonalnym odpowiednikiem procedury ; 3-+8/%7/6 7 -+ +1/7 jest funkcja Win32 3-+8/%7/6 7 -+ +1/7. Funkcja 3-+8/%7/6 7 -+ +1/7 jest częścią rozszerzeń okien adresowania (AWE, Address Windowing Extentions), rodzaju interfejsu API, który pozwala aplikacjom korzystać z 64 GB fizycznej, niestronicowanej pamięci w 32-bitowej wirtualnej przestrzeni adresowej. Na platformie Intel, jeżeli system wyposażony jest w więcej niż 4 GB pamięci fizycznej, przy uruchamianiu ustawiany jest znacznik Physical Address Extension (PAE) w rejestrze CR4, włączający 36-bitowe adresowanie fizyczne. Procedura ; 3-+8/%7/6 7 -+ +1/7 dostępna jest wyłącznie w systemie Windows 2000. Zwalnia strony pamięci fizycznej. $# # $#$$%# $ ;6//%7/6 7 -+ +1/7 63-/77 +2. /Г %$ % 9,/60 +1/7Г % +1/6+ /9,/67
' 2.3;7$+8 :/ / 7 32 +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego strony mają zostać zwolnione. Wymagany jest dostęp "##)& ) "$. 9,/60 +1/7 Wskaźnik do zmiennej określającej liczbę stron pamięci fizycznej, które mają zostać zwolnione. Jest w niej umieszczana liczba stron faktycznie ezwolnionych. +1/6+ /9,/67 Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczone są numery ramek zwalnianych stron. ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#) $ )"## lub #$$%#) "##) #)$" $. 92 - /' 2 6//%7/6 7 -+ +1/7. %;+1 Funkcjonalnym odpowiednikiem procedury ;6//%7/6 7 -+ +1/7 jest funkcja Win32 6/ %7/6 7 -+ +1/7. Procedura ;6//%7/6 7 -+ +1/7 dostępna jest wyłącznie w systemie Windows 2000. Mapuje strony pamięci fizycznej do widoku pamięci fizeycznej. $# # $#$$%# $ ; +4%7/6 7 -+ +1/7 & +7/..6/77Г % 9,/60 +1/7Г % +1/6+ /9,/67
"3. +o + ; 689+ 2+ +6+ /86 +7/..6/77 Adres należący do widoku pamięci fizycznej, do którego wykonane zostanie mapowanie. Jeżeli jest to potrzebne, zapewnione jest zaokrąglenie w dół do wielokrotności rozmiaru strony. Widok pamięci fizycznej tworzony jest wywołaniem ; 3-+8/& 689+ / 36 z parametrem 3-+8 32$ 4/ o wartości ) # )"#"&. 9,/60 +1/7 Wskaźnik do zmiennej określającej liczbę stron pamięcei fizycznej do mapowania. +1/6+ /9,/67 Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczone są numery ramek mapowanych stron. Jeżeli będzie to wskaźnik pusty, usuwane jest mapowanie pamięci fizycznej do adresu +7/..6/77. ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#) $ )"## lub #$$%#) "##) #)$" $. 92 - /' 2 +4%7/6 7 -+ +1/7. %;+1 Funkcjonalnym odpowiednikiem procedury ; +4%7/6 7 -+ +1/7 jest funkcja Win32 +4 %7/6 7 -+ +1/7. Procedura ; +4%7/6 7 -+ +1/7 dostępna jest wyłącznie w systemie Windows 2000. Wymagane jest, aby strony fizyczne zostały wcześniej zaalokowane procedurą ; 3-+8 %7/6 7 -+ +1/7. Z niewiadomych przyczyn procedura ; +4%7/6 7 -+ +1/7 nie umożliwia wskazania procesu, dla którego wykonane ma zostać mapowanie. Jest to istotna różnica w stosunku do wszystkich innych podobnych procedur, które uwzględnieają parametr 63-/77 +2. /.
' 2.3;7$+8 :/ / 7 32 Mapuje strony pamięci fizycznej do widoku pamięci fizeycznej. $# # $#$$%# $ ; +4%7/6 7 -+ +1/7#-+88/6 & +7/..6/77/7Г % 9,/60 +1/7Г % +1/6+ /9,/67 +6+ /86 +7/..6/77/7 Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczona jest tablica adresów wirtualnych (należących do widoku pamięci fizycznej), do których mapowana będzie pamięć fizyczna. Jeżeli jest to potrzebne, zapewnione jest zaokrąglenie w dół do wielokrotności rozmiaru strony. Widok pamięci fizycznej tworzony jest wywołaniem ; -+ 8/& 689+ / 36 z parametrem 3-+8 32$ 4/ o wartości ) # )"#"&. 9,/60 +1/7 Wskaźnik do zmiennej określającej liczbę stron pamięcei fizycznej do mapowania. +1/6+ /9,/67 Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczone są numery ramek mapowanych stron. Jeżeli będzie to wskaźnik pusty, usuwane jest mapowanie pamięci fizycznej do adresu +7/..6/77. ;6+-+2+;+683 Zwraca #$$%#)#%## lub kod błędu, na przykład, #$$%#) $ )"## lub #$$%#) "##) #)$" $. 92 - /' 2 +4%7/6 7 -+ +1/7#-+88/6. %;+1 Funkcjonalnym odpowiednikiem procedury ; +4%7/6 7 -+ +1/7#-+88/6 jest funkcja Win32 +4%7/6 7 -+ +1/7#-+88/6.
"3. +o + ; 689+ 2+ Procedura ; +4%7/6 7 -+ +1/7#-+88/6 dostępna jest wyłącznie w systemie Windows 2000. Wymagane jest, aby strony fizyczne zostały wcześniej zaalokowane procedurą ; 3-+8%7/6 7 -+ +1/7. Pobiera adresy stron zapisanych do obszaru pamięci weirtualnej. $# # $#$$%# $ ;/8'6 8/'+8-63-/77 +2. /Г % +17Г & +7/..6/77Г % "/1 32# /Г %$ % 900/6Г %$ % 900/6286 /7Г %$ % 6+29 +6 8 +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego pamięci dotyczyć będą dane śledzenia operacji zapisu do pamięci wirtualnej. Wymagany jest dostęp "##)& ) "$. +17 Tablica znaczników. Zdefiniowana jest wartość: +7/..6/77 '" $)'$ )"#$) /69.+2/ /. /2 + +4 79 Adres bazowy obszaru pamięci, dla którego pobrane beędą dane śledzenia. "/1 32# / 900/6 Wielkość (w bajtach) obszaru, dla którego pobrane będąe dane śledzenia. Wskazuje alokowany przez procedurę wywołującą bufor lub zmienną, w której umieszczona zostanie tablica adresów stron, w których dokonano zapisu od momentu alokacji obszaru lub zerowania danych śledzenia.
' 2.3;7$+8 :/ / 7 32 900/6286 /7 Wskazuje zmienną, która określa największą dopuszczalną ilość zwracanych adresów stron i w której umieszczana jest liczba adresów faktyczneie zwróconych. 6+29 +6 8 Wskazuje zmienną, w której podawana jest (liczona w bajtach) ziarnistość śledzenia operacji zapisu. Normalną wartością jest rozmiar strony fizyczenej. ;6+-+2+;+683 Zwraca #$$%#)#%## albo kod błędu w rodzaju #$$%#) "##) #)$" $, #$$%#) & ) " $"), #$$%#) & ) " $"), #$$%#) & ) " $") lub #$$%#) & ) " $"). 92 - /' 2 /8'6 8/'+8-. %;+1 Większość wywołań ;/8'6 8/'+8- może zrealizować funkcja /8'6 8/'+8-. Procedura ;/8'6 8/'+8- dostępna jest wyłącznie w systemie Windows 2000. Zeruje dane śledzenia operacji zapisu do pamięci wiretualnej dla wskazanego obszaru tej pamięci. $# # $#$$%# $ ;"/7/8'6 8/'+8-63-/77 +2. /Г & +7/..6/77Г % "/1 32# / +6+ /86 63-/77 +2. / Uchwyt reprezentujący proces, którego pamięci dotyczyć będzie operacja zerowania danych śledzenia operacji zapisu do pamięci wirtualnej. Wymeagany jest dostęp "##)& ) "$.
"3. +o + ; 689+ 2+ +7/..6/77 Adres bazowy obszaru pamięci, dla którego dane śledezenia zostaną wyzerowane. "/1 32# / Wielkość (w bajtach) obszaru, dla którego dane śledzeniea zostaną wyzerowane. ;6+-+2+;+683 Zwraca #$$%#)#%## albo kod błędu w rodzaju #$$%#) "##) #)$" $, #$$%#) & ) " $"), #$$%#) & ) " $") lub #$$%#) & ) " $"). 92 - /' 2 "/7/8'6 8/'+8-. %;+1 Większość wywołań ;"/7/8'6 8/'+8- może zrealizować funkcja "/7/8'6 8/'+8-. Procedura ;"/7/8'6 8/'+8- dostępna jest wyłącznie w systemie Windows 2000.