Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers winnt4.h Source File

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 */