home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / winnt4.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  12KB  |  624 lines

  1. /*
  2.  * winnt4.h
  3.  *
  4.  * Definitions only used in Windows NT 4.0 and earlier versions
  5.  *
  6.  * This file is part of the w32api package.
  7.  *
  8.  * Contributors:
  9.  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10.  *
  11.  * THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  * This source code is offered for use in the public domain. You may
  14.  * use, modify or distribute it freely.
  15.  *
  16.  * This code is distributed in the hope that it will be useful but
  17.  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  * DISCLAIMED. This includes but is not limited to warranties of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  */
  22.  
  23. #ifndef __WINNT4_H
  24. #define __WINNT4_H
  25.  
  26. #if __GNUC__ >=3
  27. #pragma GCC system_header
  28. #endif
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. typedef struct _ZONE_SEGMENT_HEADER {
  35.   SINGLE_LIST_ENTRY  SegmentList;
  36.   PVOID  Reserved;
  37. } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
  38.  
  39. typedef struct _ZONE_HEADER {
  40.   SINGLE_LIST_ENTRY  FreeList;
  41.   SINGLE_LIST_ENTRY  SegmentList;
  42.   ULONG  BlockSize;
  43.   ULONG  TotalSegmentSize;
  44. } ZONE_HEADER, *PZONE_HEADER;
  45.  
  46. static __inline PVOID
  47. ExAllocateFromZone(
  48.   IN PZONE_HEADER  Zone)
  49. {
  50.   if (Zone->FreeList.Next)
  51.     Zone->FreeList.Next = Zone->FreeList.Next->Next;
  52.   return (PVOID) Zone->FreeList.Next;
  53. }
  54.  
  55. NTOSAPI
  56. NTSTATUS
  57. DDKAPI
  58. ExExtendZone(
  59.   IN PZONE_HEADER  Zone,
  60.   IN PVOID  Segment,
  61.   IN ULONG  SegmentSize);
  62.  
  63. static __inline PVOID
  64. ExFreeToZone(
  65.   IN PZONE_HEADER  Zone,
  66.   IN PVOID  Block)
  67. {
  68.   ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
  69.   Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
  70.   return ((PSINGLE_LIST_ENTRY) Block)->Next;
  71. }
  72.  
  73. NTOSAPI
  74. NTSTATUS
  75. DDKAPI
  76. ExInitializeZone(
  77.   IN PZONE_HEADER  Zone,
  78.   IN ULONG  BlockSize,
  79.   IN PVOID  InitialSegment,
  80.   IN ULONG  InitialSegmentSize);
  81.  
  82. /*
  83.  * PVOID
  84.  * ExInterlockedAllocateFromZone(
  85.  *   IN PZONE_HEADER  Zone,
  86.  *   IN PKSPIN_LOCK  Lock)
  87.  */
  88. #define ExInterlockedAllocateFromZone(Zone, \
  89.                               Lock) \
  90.   ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
  91.  
  92. NTOSAPI
  93. NTSTATUS
  94. DDKAPI
  95. ExInterlockedExtendZone(
  96.   IN PZONE_HEADER  Zone,
  97.   IN PVOID  Segment,
  98.   IN ULONG  SegmentSize,
  99.   IN PKSPIN_LOCK  Lock);
  100.  
  101. NTOSAPI
  102. PVOID
  103. DDKAPI
  104. ExInterlockedFreeToZone(
  105.   IN PZONE_HEADER  Zone,
  106.   IN PVOID  Block,
  107.   IN PKSPIN_LOCK  Lock);
  108.  
  109. /*
  110.  * VOID
  111.  * ExInitializeWorkItem(
  112.  *   IN PWORK_QUEUE_ITEM  Item,
  113.  *   IN PWORKER_THREAD_ROUTINE  Routine,
  114.  *   IN PVOID  Context)
  115.  */
  116. #define ExInitializeWorkItem(Item, \
  117.                              Routine, \
  118.                              Context) \
  119. { \
  120.   (Item)->WorkerRoutine = Routine; \
  121.   (Item)->Parameter = Context; \
  122.   (Item)->List.Flink = NULL; \
  123. }
  124.  
  125. /*
  126.  * BOOLEAN
  127.  * ExIsFullZone(
  128.  *  IN PZONE_HEADER  Zone)
  129.  */
  130. #define ExIsFullZone(Zone) \
  131.   ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
  132.  
  133. NTOSAPI
  134. VOID
  135. DDKAPI
  136. ExQueueWorkItem(
  137.   IN PWORK_QUEUE_ITEM  WorkItem,
  138.   IN WORK_QUEUE_TYPE  QueueType);
  139.  
  140. NTOSAPI
  141. BOOLEAN
  142. DDKAPI
  143. ExIsObjectInFirstZoneSegment(
  144.   IN PZONE_HEADER  Zone,
  145.   IN PVOID  Object);
  146.  
  147. NTOSAPI
  148. VOID
  149. DDKAPI
  150. ExReleaseResource(
  151.   IN PERESOURCE  Resource);
  152.  
  153. #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
  154. #define ExAcquireResourceShared ExAcquireResourceSharedLite
  155. #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
  156. #define ExDeleteResource ExDeleteResourceLite
  157. #define ExInitializeResource ExInitializeResourceLite
  158. #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
  159. #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
  160. #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
  161. #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
  162.  
  163. NTOSAPI
  164. INTERLOCKED_RESULT
  165. DDKAPI
  166. ExInterlockedDecrementLong(
  167.   IN PLONG  Addend,
  168.   IN PKSPIN_LOCK  Lock);
  169.  
  170. NTOSAPI
  171. ULONG
  172. DDKAPI
  173. ExInterlockedExchangeUlong(
  174.   IN PULONG  Target,
  175.   IN ULONG  Value,
  176.   IN PKSPIN_LOCK  Lock);
  177.  
  178. NTOSAPI
  179. INTERLOCKED_RESULT
  180. DDKAPI
  181. ExInterlockedIncrementLong(
  182.   IN PLONG  Addend,
  183.   IN PKSPIN_LOCK  Lock);
  184.  
  185. NTOSAPI
  186. PVOID
  187. DDKAPI
  188. HalAllocateCommonBuffer(
  189.   IN PADAPTER_OBJECT  AdapterObject,
  190.   IN ULONG  Length,
  191.   OUT PPHYSICAL_ADDRESS  LogicalAddress,
  192.   IN BOOLEAN  CacheEnabled);
  193.  
  194. NTOSAPI
  195. NTSTATUS
  196. DDKAPI
  197. HalAssignSlotResources(
  198.   IN PUNICODE_STRING  RegistryPath,
  199.   IN PUNICODE_STRING  DriverClassName,
  200.   IN PDRIVER_OBJECT  DriverObject,
  201.   IN PDEVICE_OBJECT  DeviceObject,
  202.   IN INTERFACE_TYPE  BusType,
  203.   IN ULONG  BusNumber,
  204.   IN ULONG  SlotNumber,
  205.   IN OUT PCM_RESOURCE_LIST  *AllocatedResources);
  206.  
  207. NTOSAPI
  208. VOID
  209. DDKAPI
  210. HalFreeCommonBuffer(
  211.   IN PADAPTER_OBJECT  AdapterObject,
  212.   IN ULONG  Length,
  213.   IN PHYSICAL_ADDRESS  LogicalAddress,
  214.   IN PVOID  VirtualAddress,
  215.   IN BOOLEAN  CacheEnabled);
  216.  
  217. NTOSAPI
  218. PADAPTER_OBJECT
  219. DDKAPI
  220. HalGetAdapter(
  221.   IN PDEVICE_DESCRIPTION  DeviceDescription,
  222.   IN OUT PULONG  NumberOfMapRegisters);
  223.  
  224. NTOSAPI
  225. ULONG
  226. DDKAPI
  227. HalGetBusData(
  228.   IN BUS_DATA_TYPE  BusDataType,
  229.   IN ULONG  BusNumber,
  230.   IN ULONG  SlotNumber,
  231.   IN PVOID  Buffer,
  232.   IN ULONG  Length);
  233.  
  234. NTOSAPI
  235. ULONG
  236. DDKAPI
  237. HalGetBusDataByOffset(
  238.   IN BUS_DATA_TYPE  BusDataType,
  239.   IN ULONG  BusNumber,
  240.   IN ULONG  SlotNumber,
  241.   IN PVOID  Buffer,
  242.   IN ULONG  Offset,
  243.   IN ULONG  Length);
  244.  
  245. NTOSAPI
  246. ULONG
  247. DDKAPI
  248. HalGetDmaAlignmentRequirement( 
  249.   VOID);
  250.  
  251. NTOSAPI
  252. ULONG
  253. DDKAPI
  254. HalGetInterruptVector(
  255.   IN INTERFACE_TYPE  InterfaceType,
  256.   IN ULONG  BusNumber,
  257.   IN ULONG  BusInterruptLevel,
  258.   IN ULONG  BusInterruptVector,
  259.   OUT PKIRQL  Irql,
  260.   OUT PKAFFINITY  Affinity);
  261.  
  262. NTOSAPI
  263. ULONG
  264. DDKAPI
  265. HalReadDmaCounter(
  266.   IN PADAPTER_OBJECT  AdapterObject);
  267.  
  268. NTOSAPI
  269. ULONG
  270. DDKAPI
  271. HalSetBusData(
  272.   IN BUS_DATA_TYPE  BusDataType,
  273.   IN ULONG  BusNumber,
  274.   IN ULONG  SlotNumber,
  275.   IN PVOID  Buffer,
  276.   IN ULONG  Length);
  277.  
  278. NTOSAPI
  279. ULONG
  280. DDKAPI
  281. HalSetBusDataByOffset(
  282.   IN BUS_DATA_TYPE  BusDataType,
  283.   IN ULONG  BusNumber,
  284.   IN ULONG  SlotNumber,
  285.   IN PVOID  Buffer,
  286.   IN ULONG  Offset,
  287.   IN ULONG  Length);
  288.  
  289. NTOSAPI
  290. BOOLEAN
  291. DDKAPI
  292. HalTranslateBusAddress(
  293.   IN INTERFACE_TYPE  InterfaceType,
  294.   IN ULONG  BusNumber,
  295.   IN PHYSICAL_ADDRESS  BusAddress,
  296.   IN OUT PULONG  AddressSpace,
  297.   OUT PPHYSICAL_ADDRESS  TranslatedAddress);
  298.  
  299. NTOSAPI
  300. NTSTATUS
  301. DDKAPI
  302. IoAllocateAdapterChannel(
  303.   IN PADAPTER_OBJECT  AdapterObject,
  304.   IN PDEVICE_OBJECT  DeviceObject,
  305.   IN ULONG  NumberOfMapRegisters,
  306.   IN PDRIVER_CONTROL  ExecutionRoutine,
  307.   IN PVOID  Context);
  308.  
  309. NTOSAPI
  310. NTSTATUS
  311. DDKAPI
  312. IoAssignResources(
  313.   IN PUNICODE_STRING  RegistryPath,
  314.   IN PUNICODE_STRING  DriverClassName  OPTIONAL,
  315.   IN PDRIVER_OBJECT  DriverObject,
  316.   IN PDEVICE_OBJECT  DeviceObject  OPTIONAL,
  317.   IN PIO_RESOURCE_REQUIREMENTS_LIST  RequestedResources,
  318.   IN OUT PCM_RESOURCE_LIST  *AllocatedResources);
  319.  
  320. NTOSAPI
  321. NTSTATUS
  322. DDKAPI
  323. IoAttachDeviceByPointer(
  324.   IN PDEVICE_OBJECT  SourceDevice,
  325.   IN PDEVICE_OBJECT  TargetDevice);
  326.  
  327. NTOSAPI
  328. BOOLEAN
  329. DDKAPI
  330. IoFlushAdapterBuffers(
  331.   IN PADAPTER_OBJECT  AdapterObject,
  332.   IN PMDL  Mdl,
  333.   IN PVOID  MapRegisterBase,
  334.   IN PVOID  CurrentVa,
  335.   IN ULONG  Length,
  336.   IN BOOLEAN  WriteToDevice);
  337.  
  338. NTOSAPI
  339. VOID
  340. DDKAPI
  341. IoFreeAdapterChannel(
  342.   IN PADAPTER_OBJECT  AdapterObject);
  343.  
  344. NTOSAPI
  345. VOID
  346. DDKAPI
  347. IoFreeMapRegisters(
  348.   IN PADAPTER_OBJECT  AdapterObject,
  349.   IN PVOID  MapRegisterBase,
  350.   IN ULONG  NumberOfMapRegisters);
  351.  
  352. NTOSAPI
  353. PHYSICAL_ADDRESS
  354. DDKAPI
  355. IoMapTransfer(
  356.   IN PADAPTER_OBJECT  AdapterObject,
  357.   IN PMDL  Mdl,
  358.   IN PVOID  MapRegisterBase,
  359.   IN PVOID  CurrentVa,
  360.   IN OUT PULONG  Length,
  361.   IN BOOLEAN  WriteToDevice);
  362.  
  363. NTOSAPI
  364. PMDL
  365. DDKAPI
  366. MmCreateMdl(
  367.   IN PMDL  MemoryDescriptorList  OPTIONAL,
  368.   IN PVOID  Base,
  369.   IN SIZE_T  Length);
  370.  
  371. NTOSAPI
  372. BOOLEAN
  373. DDKAPI
  374. MmIsNonPagedSystemAddressValid(
  375.   IN PVOID  VirtualAddress);
  376.  
  377. NTOSAPI
  378. LARGE_INTEGER
  379. DDKAPI
  380. RtlEnlargedIntegerMultiply(
  381.   IN LONG  Multiplicand,
  382.   IN LONG  Multiplier);
  383.  
  384. NTOSAPI
  385. ULONG
  386. DDKAPI
  387. RtlEnlargedUnsignedDivide(
  388.   IN ULARGE_INTEGER  Dividend,
  389.   IN ULONG  Divisor,
  390.   IN OUT PULONG  Remainder);
  391.  
  392. NTOSAPI
  393. LARGE_INTEGER
  394. DDKAPI
  395. RtlEnlargedUnsignedMultiply(
  396.   IN ULONG  Multiplicand,
  397.   IN ULONG  Multiplier);
  398.  
  399. NTOSAPI
  400. LARGE_INTEGER
  401. DDKAPI
  402. RtlExtendedIntegerMultiply(
  403.   IN LARGE_INTEGER  Multiplicand,
  404.   IN LONG  Multiplier);
  405.  
  406. NTOSAPI
  407. LARGE_INTEGER
  408. DDKAPI
  409. RtlExtendedLargeIntegerDivide(
  410.   IN LARGE_INTEGER  Dividend,
  411.   IN ULONG  Divisor,
  412.   IN OUT PULONG  Remainder);
  413.  
  414. NTOSAPI
  415. LARGE_INTEGER
  416. DDKAPI
  417. RtlExtendedMagicDivide(
  418.   IN LARGE_INTEGER  Dividend,
  419.   IN LARGE_INTEGER  MagicDivisor,
  420.   IN CCHAR  ShiftCount);
  421.  
  422. NTOSAPI
  423. LARGE_INTEGER
  424. DDKAPI
  425. RtlLargeIntegerAdd(
  426.   IN LARGE_INTEGER  Addend1,
  427.   IN LARGE_INTEGER  Addend2);
  428.  
  429. NTOSAPI
  430. VOID
  431. DDKAPI
  432. RtlLargeIntegerAnd(
  433.   IN OUT LARGE_INTEGER  Result,
  434.   IN LARGE_INTEGER  Source,
  435.   IN LARGE_INTEGER  Mask);
  436.  
  437. NTOSAPI
  438. LARGE_INTEGER
  439. DDKAPI
  440. RtlLargeIntegerArithmeticShift(
  441.   IN LARGE_INTEGER  LargeInteger,
  442.   IN CCHAR  ShiftCount);
  443.  
  444. NTOSAPI
  445. LARGE_INTEGER
  446. DDKAPI
  447. RtlLargeIntegerDivide(
  448.   IN LARGE_INTEGER  Dividend,
  449.   IN LARGE_INTEGER  Divisor,
  450.   IN OUT PLARGE_INTEGER  Remainder);
  451.  
  452. NTOSAPI
  453. BOOLEAN
  454. DDKAPI
  455. RtlLargeIntegerEqualTo(
  456.   IN LARGE_INTEGER  Operand1,
  457.   IN LARGE_INTEGER  Operand2);
  458.  
  459. NTOSAPI
  460. BOOLEAN
  461. DDKAPI
  462. RtlLargeIntegerEqualToZero(
  463.   IN LARGE_INTEGER  Operand);
  464.  
  465. NTOSAPI
  466. BOOLEAN
  467. DDKAPI
  468. RtlLargeIntegerGreaterOrEqualToZero(
  469.   IN LARGE_INTEGER  Operand);
  470.  
  471. NTOSAPI
  472. BOOLEAN
  473. DDKAPI
  474. RtlLargeIntegerGreaterThan(
  475.   IN LARGE_INTEGER  Operand1,
  476.   IN LARGE_INTEGER  Operand2);
  477.  
  478. NTOSAPI
  479. BOOLEAN
  480. DDKAPI
  481. RtlLargeIntegerGreaterThanOrEqualTo(
  482.   IN LARGE_INTEGER  Operand1,
  483.   IN LARGE_INTEGER  Operand2);
  484.  
  485. NTOSAPI
  486. BOOLEAN
  487. DDKAPI
  488. RtlLargeIntegerGreaterThanZero(
  489.   IN LARGE_INTEGER  Operand);
  490.  
  491. NTOSAPI
  492. BOOLEAN
  493. DDKAPI
  494. RtlLargeIntegerLessOrEqualToZero(
  495.   IN LARGE_INTEGER  Operand);
  496.  
  497. NTOSAPI
  498. BOOLEAN
  499. DDKAPI
  500. RtlLargeIntegerLessThan(
  501.   IN LARGE_INTEGER  Operand1,
  502.   IN LARGE_INTEGER  Operand2);
  503.  
  504. NTOSAPI
  505. BOOLEAN
  506. DDKAPI
  507. RtlLargeIntegerLessThanOrEqualTo(
  508.   IN LARGE_INTEGER  Operand1,
  509.   IN LARGE_INTEGER  Operand2);
  510.  
  511. NTOSAPI
  512. BOOLEAN
  513. DDKAPI
  514. RtlLargeIntegerLessThanZero(
  515.   IN LARGE_INTEGER  Operand);
  516.  
  517. NTOSAPI
  518. LARGE_INTEGER
  519. DDKAPI
  520. RtlLargeIntegerNegate(
  521.   IN LARGE_INTEGER  Subtrahend);
  522.  
  523. NTOSAPI
  524. BOOLEAN
  525. DDKAPI
  526. RtlLargeIntegerNotEqualTo(
  527.   IN LARGE_INTEGER  Operand1,
  528.   IN LARGE_INTEGER  Operand2);
  529.  
  530. NTOSAPI
  531. BOOLEAN
  532. DDKAPI
  533. RtlLargeIntegerNotEqualToZero(
  534.   IN LARGE_INTEGER  Operand);
  535.  
  536. NTOSAPI
  537. LARGE_INTEGER
  538. DDKAPI
  539. RtlLargeIntegerShiftLeft(
  540.   IN LARGE_INTEGER  LargeInteger,
  541.   IN CCHAR  ShiftCount);
  542.  
  543. NTOSAPI
  544. LARGE_INTEGER
  545. DDKAPI
  546. RtlLargeIntegerShiftRight(
  547.   IN LARGE_INTEGER  LargeInteger,
  548.   IN CCHAR  ShiftCount);
  549.  
  550. NTOSAPI
  551. LARGE_INTEGER
  552. DDKAPI
  553. RtlLargeIntegerSubtract(
  554.   IN LARGE_INTEGER  Minuend,
  555.   IN LARGE_INTEGER  Subtrahend);
  556.  
  557.  
  558. /*
  559.  * ULONG
  560.  * COMPUTE_PAGES_SPANNED(
  561.  *   IN PVOID  Va,
  562.  *   IN ULONG  Size)
  563.  */
  564. #define COMPUTE_PAGES_SPANNED(Va, \
  565.                               Size) \
  566.   (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
  567.  
  568.  
  569. /*
  570. ** Architecture specific functions
  571. */
  572.  
  573. #ifdef _X86_
  574.  
  575. NTOSAPI
  576. INTERLOCKED_RESULT
  577. DDKAPI
  578. Exi386InterlockedIncrementLong(
  579.   IN PLONG  Addend);
  580.  
  581. NTOSAPI
  582. INTERLOCKED_RESULT
  583. DDKFASTAPI
  584. Exfi386InterlockedIncrementLong(
  585.   IN PLONG  Addend);
  586.  
  587. NTOSAPI
  588. INTERLOCKED_RESULT
  589. DDKAPI
  590. Exi386InterlockedDecrementLong(
  591.   IN PLONG  Addend);
  592.  
  593. NTOSAPI
  594. INTERLOCKED_RESULT
  595. DDKFASTAPI
  596. Exfi386InterlockedDecrementLong(
  597.   IN PLONG  Addend);
  598.  
  599. NTOSAPI
  600. ULONG
  601. DDKAPI
  602. Exi386InterlockedExchangeUlong(
  603.   IN PULONG  Target,
  604.   IN ULONG  Value);
  605.  
  606. NTOSAPI
  607. ULONG
  608. DDKFASTAPI
  609. Exfi386InterlockedExchangeUlong(
  610.   IN PULONG  Target,
  611.   IN ULONG  Value);
  612.  
  613. #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
  614. #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
  615. #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
  616.  
  617. #endif /* _X86_ */
  618.  
  619. #ifdef __cplusplus
  620. }
  621. #endif
  622.  
  623. #endif /* __WINNT4_H */
  624.