Embed:
(wiki syntax)
Show/hide line numbers
winnt4.h
00001 /* 00002 * winnt4.h 00003 * 00004 * Definitions only used in Windows NT 4.0 and earlier versions 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __WINNT4_H 00024 #define __WINNT4_H 00025 00026 #if __GNUC__ >=3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #ifdef __cplusplus 00031 extern "C" { 00032 #endif 00033 00034 typedef struct _ZONE_SEGMENT_HEADER { 00035 SINGLE_LIST_ENTRY SegmentList; 00036 PVOID Reserved; 00037 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; 00038 00039 typedef struct _ZONE_HEADER { 00040 SINGLE_LIST_ENTRY FreeList; 00041 SINGLE_LIST_ENTRY SegmentList; 00042 ULONG BlockSize; 00043 ULONG TotalSegmentSize; 00044 } ZONE_HEADER, *PZONE_HEADER; 00045 00046 static __inline PVOID 00047 ExAllocateFromZone( 00048 /*IN*/ PZONE_HEADER Zone) 00049 { 00050 if (Zone->FreeList.Next) 00051 Zone->FreeList.Next = Zone->FreeList.Next->Next; 00052 return (PVOID) Zone->FreeList.Next; 00053 } 00054 00055 NTOSAPI 00056 NTSTATUS 00057 DDKAPI 00058 ExExtendZone( 00059 /*IN*/ PZONE_HEADER Zone, 00060 /*IN*/ PVOID Segment, 00061 /*IN*/ ULONG SegmentSize); 00062 00063 static __inline PVOID 00064 ExFreeToZone( 00065 /*IN*/ PZONE_HEADER Zone, 00066 /*IN*/ PVOID Block) 00067 { 00068 ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next; 00069 Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block); 00070 return ((PSINGLE_LIST_ENTRY) Block)->Next; 00071 } 00072 00073 NTOSAPI 00074 NTSTATUS 00075 DDKAPI 00076 ExInitializeZone( 00077 /*IN*/ PZONE_HEADER Zone, 00078 /*IN*/ ULONG BlockSize, 00079 /*IN*/ PVOID InitialSegment, 00080 /*IN*/ ULONG InitialSegmentSize); 00081 00082 /* 00083 * PVOID 00084 * ExInterlockedAllocateFromZone( 00085 * IN PZONE_HEADER Zone, 00086 * IN PKSPIN_LOCK Lock) 00087 */ 00088 #define ExInterlockedAllocateFromZone(Zone, \ 00089 Lock) \ 00090 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock)) 00091 00092 NTOSAPI 00093 NTSTATUS 00094 DDKAPI 00095 ExInterlockedExtendZone( 00096 /*IN*/ PZONE_HEADER Zone, 00097 /*IN*/ PVOID Segment, 00098 /*IN*/ ULONG SegmentSize, 00099 /*IN*/ PKSPIN_LOCK Lock); 00100 00101 NTOSAPI 00102 PVOID 00103 DDKAPI 00104 ExInterlockedFreeToZone( 00105 /*IN*/ PZONE_HEADER Zone, 00106 /*IN*/ PVOID Block, 00107 /*IN*/ PKSPIN_LOCK Lock); 00108 00109 /* 00110 * VOID 00111 * ExInitializeWorkItem( 00112 * IN PWORK_QUEUE_ITEM Item, 00113 * IN PWORKER_THREAD_ROUTINE Routine, 00114 * IN PVOID Context) 00115 */ 00116 #define ExInitializeWorkItem(Item, \ 00117 Routine, \ 00118 Context) \ 00119 { \ 00120 (Item)->WorkerRoutine = Routine; \ 00121 (Item)->Parameter = Context; \ 00122 (Item)->List.Flink = NULL; \ 00123 } 00124 00125 /* 00126 * BOOLEAN 00127 * ExIsFullZone( 00128 * IN PZONE_HEADER Zone) 00129 */ 00130 #define ExIsFullZone(Zone) \ 00131 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL) 00132 00133 NTOSAPI 00134 VOID 00135 DDKAPI 00136 ExQueueWorkItem( 00137 /*IN*/ PWORK_QUEUE_ITEM WorkItem, 00138 /*IN*/ WORK_QUEUE_TYPE QueueType); 00139 00140 NTOSAPI 00141 BOOLEAN 00142 DDKAPI 00143 ExIsObjectInFirstZoneSegment( 00144 /*IN*/ PZONE_HEADER Zone, 00145 /*IN*/ PVOID Object); 00146 00147 NTOSAPI 00148 VOID 00149 DDKAPI 00150 ExReleaseResource( 00151 /*IN*/ PERESOURCE Resource); 00152 00153 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite 00154 #define ExAcquireResourceShared ExAcquireResourceSharedLite 00155 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite 00156 #define ExDeleteResource ExDeleteResourceLite 00157 #define ExInitializeResource ExInitializeResourceLite 00158 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite 00159 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite 00160 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite 00161 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite 00162 00163 NTOSAPI 00164 INTERLOCKED_RESULT 00165 DDKAPI 00166 ExInterlockedDecrementLong( 00167 /*IN*/ PLONG Addend, 00168 /*IN*/ PKSPIN_LOCK Lock); 00169 00170 NTOSAPI 00171 ULONG 00172 DDKAPI 00173 ExInterlockedExchangeUlong( 00174 /*IN*/ PULONG Target, 00175 /*IN*/ ULONG Value, 00176 /*IN*/ PKSPIN_LOCK Lock); 00177 00178 NTOSAPI 00179 INTERLOCKED_RESULT 00180 DDKAPI 00181 ExInterlockedIncrementLong( 00182 /*IN*/ PLONG Addend, 00183 /*IN*/ PKSPIN_LOCK Lock); 00184 00185 NTOSAPI 00186 PVOID 00187 DDKAPI 00188 HalAllocateCommonBuffer( 00189 /*IN*/ PADAPTER_OBJECT AdapterObject, 00190 /*IN*/ ULONG Length, 00191 /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress, 00192 /*IN*/ BOOLEAN CacheEnabled); 00193 00194 NTOSAPI 00195 NTSTATUS 00196 DDKAPI 00197 HalAssignSlotResources( 00198 /*IN*/ PUNICODE_STRING RegistryPath, 00199 /*IN*/ PUNICODE_STRING DriverClassName, 00200 /*IN*/ PDRIVER_OBJECT DriverObject, 00201 /*IN*/ PDEVICE_OBJECT DeviceObject, 00202 /*IN*/ INTERFACE_TYPE BusType, 00203 /*IN*/ ULONG BusNumber, 00204 /*IN*/ ULONG SlotNumber, 00205 /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources); 00206 00207 NTOSAPI 00208 VOID 00209 DDKAPI 00210 HalFreeCommonBuffer( 00211 /*IN*/ PADAPTER_OBJECT AdapterObject, 00212 /*IN*/ ULONG Length, 00213 /*IN*/ PHYSICAL_ADDRESS LogicalAddress, 00214 /*IN*/ PVOID VirtualAddress, 00215 /*IN*/ BOOLEAN CacheEnabled); 00216 00217 NTOSAPI 00218 PADAPTER_OBJECT 00219 DDKAPI 00220 HalGetAdapter( 00221 /*IN*/ PDEVICE_DESCRIPTION DeviceDescription, 00222 /*IN OUT*/ PULONG NumberOfMapRegisters); 00223 00224 NTOSAPI 00225 ULONG 00226 DDKAPI 00227 HalGetBusData( 00228 /*IN*/ BUS_DATA_TYPE BusDataType, 00229 /*IN*/ ULONG BusNumber, 00230 /*IN*/ ULONG SlotNumber, 00231 /*IN*/ PVOID Buffer, 00232 /*IN*/ ULONG Length); 00233 00234 NTOSAPI 00235 ULONG 00236 DDKAPI 00237 HalGetBusDataByOffset( 00238 /*IN*/ BUS_DATA_TYPE BusDataType, 00239 /*IN*/ ULONG BusNumber, 00240 /*IN*/ ULONG SlotNumber, 00241 /*IN*/ PVOID Buffer, 00242 /*IN*/ ULONG Offset, 00243 /*IN*/ ULONG Length); 00244 00245 NTOSAPI 00246 ULONG 00247 DDKAPI 00248 HalGetDmaAlignmentRequirement( 00249 VOID); 00250 00251 NTOSAPI 00252 ULONG 00253 DDKAPI 00254 HalGetInterruptVector( 00255 /*IN*/ INTERFACE_TYPE InterfaceType, 00256 /*IN*/ ULONG BusNumber, 00257 /*IN*/ ULONG BusInterruptLevel, 00258 /*IN*/ ULONG BusInterruptVector, 00259 /*OUT*/ PKIRQL Irql, 00260 /*OUT*/ PKAFFINITY Affinity); 00261 00262 NTOSAPI 00263 ULONG 00264 DDKAPI 00265 HalReadDmaCounter( 00266 /*IN*/ PADAPTER_OBJECT AdapterObject); 00267 00268 NTOSAPI 00269 ULONG 00270 DDKAPI 00271 HalSetBusData( 00272 /*IN*/ BUS_DATA_TYPE BusDataType, 00273 /*IN*/ ULONG BusNumber, 00274 /*IN*/ ULONG SlotNumber, 00275 /*IN*/ PVOID Buffer, 00276 /*IN*/ ULONG Length); 00277 00278 NTOSAPI 00279 ULONG 00280 DDKAPI 00281 HalSetBusDataByOffset( 00282 /*IN*/ BUS_DATA_TYPE BusDataType, 00283 /*IN*/ ULONG BusNumber, 00284 /*IN*/ ULONG SlotNumber, 00285 /*IN*/ PVOID Buffer, 00286 /*IN*/ ULONG Offset, 00287 /*IN*/ ULONG Length); 00288 00289 NTOSAPI 00290 BOOLEAN 00291 DDKAPI 00292 HalTranslateBusAddress( 00293 /*IN*/ INTERFACE_TYPE InterfaceType, 00294 /*IN*/ ULONG BusNumber, 00295 /*IN*/ PHYSICAL_ADDRESS BusAddress, 00296 /*IN OUT*/ PULONG AddressSpace, 00297 /*OUT*/ PPHYSICAL_ADDRESS TranslatedAddress); 00298 00299 NTOSAPI 00300 NTSTATUS 00301 DDKAPI 00302 IoAllocateAdapterChannel( 00303 /*IN*/ PADAPTER_OBJECT AdapterObject, 00304 /*IN*/ PDEVICE_OBJECT DeviceObject, 00305 /*IN*/ ULONG NumberOfMapRegisters, 00306 /*IN*/ PDRIVER_CONTROL ExecutionRoutine, 00307 /*IN*/ PVOID Context); 00308 00309 NTOSAPI 00310 NTSTATUS 00311 DDKAPI 00312 IoAssignResources( 00313 /*IN*/ PUNICODE_STRING RegistryPath, 00314 /*IN*/ PUNICODE_STRING DriverClassName /*OPTIONAL*/, 00315 /*IN*/ PDRIVER_OBJECT DriverObject, 00316 /*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/, 00317 /*IN*/ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources, 00318 /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources); 00319 00320 NTOSAPI 00321 NTSTATUS 00322 DDKAPI 00323 IoAttachDeviceByPointer( 00324 /*IN*/ PDEVICE_OBJECT SourceDevice, 00325 /*IN*/ PDEVICE_OBJECT TargetDevice); 00326 00327 NTOSAPI 00328 BOOLEAN 00329 DDKAPI 00330 IoFlushAdapterBuffers( 00331 /*IN*/ PADAPTER_OBJECT AdapterObject, 00332 /*IN*/ PMDL Mdl, 00333 /*IN*/ PVOID MapRegisterBase, 00334 /*IN*/ PVOID CurrentVa, 00335 /*IN*/ ULONG Length, 00336 /*IN*/ BOOLEAN WriteToDevice); 00337 00338 NTOSAPI 00339 VOID 00340 DDKAPI 00341 IoFreeAdapterChannel( 00342 /*IN*/ PADAPTER_OBJECT AdapterObject); 00343 00344 NTOSAPI 00345 VOID 00346 DDKAPI 00347 IoFreeMapRegisters( 00348 /*IN*/ PADAPTER_OBJECT AdapterObject, 00349 /*IN*/ PVOID MapRegisterBase, 00350 /*IN*/ ULONG NumberOfMapRegisters); 00351 00352 NTOSAPI 00353 PHYSICAL_ADDRESS 00354 DDKAPI 00355 IoMapTransfer( 00356 /*IN*/ PADAPTER_OBJECT AdapterObject, 00357 /*IN*/ PMDL Mdl, 00358 /*IN*/ PVOID MapRegisterBase, 00359 /*IN*/ PVOID CurrentVa, 00360 /*IN OUT*/ PULONG Length, 00361 /*IN*/ BOOLEAN WriteToDevice); 00362 00363 NTOSAPI 00364 PMDL 00365 DDKAPI 00366 MmCreateMdl( 00367 /*IN*/ PMDL MemoryDescriptorList /*OPTIONAL*/, 00368 /*IN*/ PVOID Base, 00369 /*IN*/ SIZE_T Length); 00370 00371 NTOSAPI 00372 BOOLEAN 00373 DDKAPI 00374 MmIsNonPagedSystemAddressValid( 00375 /*IN*/ PVOID VirtualAddress); 00376 00377 NTOSAPI 00378 LARGE_INTEGER 00379 DDKAPI 00380 RtlEnlargedIntegerMultiply( 00381 /*IN*/ LONG Multiplicand, 00382 /*IN*/ LONG Multiplier); 00383 00384 NTOSAPI 00385 ULONG 00386 DDKAPI 00387 RtlEnlargedUnsignedDivide( 00388 /*IN*/ ULARGE_INTEGER Dividend, 00389 /*IN*/ ULONG Divisor, 00390 /*IN OUT*/ PULONG Remainder); 00391 00392 NTOSAPI 00393 LARGE_INTEGER 00394 DDKAPI 00395 RtlEnlargedUnsignedMultiply( 00396 /*IN*/ ULONG Multiplicand, 00397 /*IN*/ ULONG Multiplier); 00398 00399 NTOSAPI 00400 LARGE_INTEGER 00401 DDKAPI 00402 RtlExtendedIntegerMultiply( 00403 /*IN*/ LARGE_INTEGER Multiplicand, 00404 /*IN*/ LONG Multiplier); 00405 00406 NTOSAPI 00407 LARGE_INTEGER 00408 DDKAPI 00409 RtlExtendedLargeIntegerDivide( 00410 /*IN*/ LARGE_INTEGER Dividend, 00411 /*IN*/ ULONG Divisor, 00412 /*IN OUT*/ PULONG Remainder); 00413 00414 NTOSAPI 00415 LARGE_INTEGER 00416 DDKAPI 00417 RtlExtendedMagicDivide( 00418 /*IN*/ LARGE_INTEGER Dividend, 00419 /*IN*/ LARGE_INTEGER MagicDivisor, 00420 /*IN*/ CCHAR ShiftCount); 00421 00422 NTOSAPI 00423 LARGE_INTEGER 00424 DDKAPI 00425 RtlLargeIntegerAdd( 00426 /*IN*/ LARGE_INTEGER Addend1, 00427 /*IN*/ LARGE_INTEGER Addend2); 00428 00429 NTOSAPI 00430 VOID 00431 DDKAPI 00432 RtlLargeIntegerAnd( 00433 /*IN OUT*/ LARGE_INTEGER Result, 00434 /*IN*/ LARGE_INTEGER Source, 00435 /*IN*/ LARGE_INTEGER Mask); 00436 00437 NTOSAPI 00438 LARGE_INTEGER 00439 DDKAPI 00440 RtlLargeIntegerArithmeticShift( 00441 /*IN*/ LARGE_INTEGER LargeInteger, 00442 /*IN*/ CCHAR ShiftCount); 00443 00444 NTOSAPI 00445 LARGE_INTEGER 00446 DDKAPI 00447 RtlLargeIntegerDivide( 00448 /*IN*/ LARGE_INTEGER Dividend, 00449 /*IN*/ LARGE_INTEGER Divisor, 00450 /*IN OUT*/ PLARGE_INTEGER Remainder); 00451 00452 NTOSAPI 00453 BOOLEAN 00454 DDKAPI 00455 RtlLargeIntegerEqualTo( 00456 /*IN*/ LARGE_INTEGER Operand1, 00457 /*IN*/ LARGE_INTEGER Operand2); 00458 00459 NTOSAPI 00460 BOOLEAN 00461 DDKAPI 00462 RtlLargeIntegerEqualToZero( 00463 /*IN*/ LARGE_INTEGER Operand); 00464 00465 NTOSAPI 00466 BOOLEAN 00467 DDKAPI 00468 RtlLargeIntegerGreaterOrEqualToZero( 00469 /*IN*/ LARGE_INTEGER Operand); 00470 00471 NTOSAPI 00472 BOOLEAN 00473 DDKAPI 00474 RtlLargeIntegerGreaterThan( 00475 /*IN*/ LARGE_INTEGER Operand1, 00476 /*IN*/ LARGE_INTEGER Operand2); 00477 00478 NTOSAPI 00479 BOOLEAN 00480 DDKAPI 00481 RtlLargeIntegerGreaterThanOrEqualTo( 00482 /*IN*/ LARGE_INTEGER Operand1, 00483 /*IN*/ LARGE_INTEGER Operand2); 00484 00485 NTOSAPI 00486 BOOLEAN 00487 DDKAPI 00488 RtlLargeIntegerGreaterThanZero( 00489 /*IN*/ LARGE_INTEGER Operand); 00490 00491 NTOSAPI 00492 BOOLEAN 00493 DDKAPI 00494 RtlLargeIntegerLessOrEqualToZero( 00495 /*IN*/ LARGE_INTEGER Operand); 00496 00497 NTOSAPI 00498 BOOLEAN 00499 DDKAPI 00500 RtlLargeIntegerLessThan( 00501 /*IN*/ LARGE_INTEGER Operand1, 00502 /*IN*/ LARGE_INTEGER Operand2); 00503 00504 NTOSAPI 00505 BOOLEAN 00506 DDKAPI 00507 RtlLargeIntegerLessThanOrEqualTo( 00508 /*IN*/ LARGE_INTEGER Operand1, 00509 /*IN*/ LARGE_INTEGER Operand2); 00510 00511 NTOSAPI 00512 BOOLEAN 00513 DDKAPI 00514 RtlLargeIntegerLessThanZero( 00515 /*IN*/ LARGE_INTEGER Operand); 00516 00517 NTOSAPI 00518 LARGE_INTEGER 00519 DDKAPI 00520 RtlLargeIntegerNegate( 00521 /*IN*/ LARGE_INTEGER Subtrahend); 00522 00523 NTOSAPI 00524 BOOLEAN 00525 DDKAPI 00526 RtlLargeIntegerNotEqualTo( 00527 /*IN*/ LARGE_INTEGER Operand1, 00528 /*IN*/ LARGE_INTEGER Operand2); 00529 00530 NTOSAPI 00531 BOOLEAN 00532 DDKAPI 00533 RtlLargeIntegerNotEqualToZero( 00534 /*IN*/ LARGE_INTEGER Operand); 00535 00536 NTOSAPI 00537 LARGE_INTEGER 00538 DDKAPI 00539 RtlLargeIntegerShiftLeft( 00540 /*IN*/ LARGE_INTEGER LargeInteger, 00541 /*IN*/ CCHAR ShiftCount); 00542 00543 NTOSAPI 00544 LARGE_INTEGER 00545 DDKAPI 00546 RtlLargeIntegerShiftRight( 00547 /*IN*/ LARGE_INTEGER LargeInteger, 00548 /*IN*/ CCHAR ShiftCount); 00549 00550 NTOSAPI 00551 LARGE_INTEGER 00552 DDKAPI 00553 RtlLargeIntegerSubtract( 00554 /*IN*/ LARGE_INTEGER Minuend, 00555 /*IN*/ LARGE_INTEGER Subtrahend); 00556 00557 00558 /* 00559 * ULONG 00560 * COMPUTE_PAGES_SPANNED( 00561 * IN PVOID Va, 00562 * IN ULONG Size) 00563 */ 00564 #define COMPUTE_PAGES_SPANNED(Va, \ 00565 Size) \ 00566 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size)) 00567 00568 00569 /* 00570 ** Architecture specific functions 00571 */ 00572 00573 #ifdef _X86_ 00574 00575 NTOSAPI 00576 INTERLOCKED_RESULT 00577 DDKAPI 00578 Exi386InterlockedIncrementLong( 00579 /*IN*/ PLONG Addend); 00580 00581 NTOSAPI 00582 INTERLOCKED_RESULT 00583 DDKFASTAPI 00584 Exfi386InterlockedIncrementLong( 00585 /*IN*/ PLONG Addend); 00586 00587 NTOSAPI 00588 INTERLOCKED_RESULT 00589 DDKAPI 00590 Exi386InterlockedDecrementLong( 00591 /*IN*/ PLONG Addend); 00592 00593 NTOSAPI 00594 INTERLOCKED_RESULT 00595 DDKFASTAPI 00596 Exfi386InterlockedDecrementLong( 00597 /*IN*/ PLONG Addend); 00598 00599 NTOSAPI 00600 ULONG 00601 DDKAPI 00602 Exi386InterlockedExchangeUlong( 00603 /*IN*/ PULONG Target, 00604 /*IN*/ ULONG Value); 00605 00606 NTOSAPI 00607 ULONG 00608 DDKFASTAPI 00609 Exfi386InterlockedExchangeUlong( 00610 /*IN*/ PULONG Target, 00611 /*IN*/ ULONG Value); 00612 00613 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend) 00614 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend) 00615 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value) 00616 00617 #endif /* _X86_ */ 00618 00619 #ifdef __cplusplus 00620 } 00621 #endif 00622 00623 #endif /* __WINNT4_H */
Generated on Tue Jul 12 2022 19:59:55 by
1.7.2