newlib/winsup/w32api/include/ddk/winnt4.h

624 lines
12 KiB
C

/*
* winnt4.h
*
* Definitions only used in Windows NT 4.0 and earlier versions
*
* This file is part of the w32api package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __WINNT4_H
#define __WINNT4_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _ZONE_SEGMENT_HEADER {
SINGLE_LIST_ENTRY SegmentList;
PVOID Reserved;
} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
typedef struct _ZONE_HEADER {
SINGLE_LIST_ENTRY FreeList;
SINGLE_LIST_ENTRY SegmentList;
ULONG BlockSize;
ULONG TotalSegmentSize;
} ZONE_HEADER, *PZONE_HEADER;
static __inline PVOID
ExAllocateFromZone(
/*IN*/ PZONE_HEADER Zone)
{
if (Zone->FreeList.Next)
Zone->FreeList.Next = Zone->FreeList.Next->Next;
return (PVOID) Zone->FreeList.Next;
}
NTOSAPI
NTSTATUS
DDKAPI
ExExtendZone(
/*IN*/ PZONE_HEADER Zone,
/*IN*/ PVOID Segment,
/*IN*/ ULONG SegmentSize);
static __inline PVOID
ExFreeToZone(
/*IN*/ PZONE_HEADER Zone,
/*IN*/ PVOID Block)
{
((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
return ((PSINGLE_LIST_ENTRY) Block)->Next;
}
NTOSAPI
NTSTATUS
DDKAPI
ExInitializeZone(
/*IN*/ PZONE_HEADER Zone,
/*IN*/ ULONG BlockSize,
/*IN*/ PVOID InitialSegment,
/*IN*/ ULONG InitialSegmentSize);
/*
* PVOID
* ExInterlockedAllocateFromZone(
* IN PZONE_HEADER Zone,
* IN PKSPIN_LOCK Lock)
*/
#define ExInterlockedAllocateFromZone(Zone, \
Lock) \
((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
NTOSAPI
NTSTATUS
DDKAPI
ExInterlockedExtendZone(
/*IN*/ PZONE_HEADER Zone,
/*IN*/ PVOID Segment,
/*IN*/ ULONG SegmentSize,
/*IN*/ PKSPIN_LOCK Lock);
NTOSAPI
PVOID
DDKAPI
ExInterlockedFreeToZone(
/*IN*/ PZONE_HEADER Zone,
/*IN*/ PVOID Block,
/*IN*/ PKSPIN_LOCK Lock);
/*
* VOID
* ExInitializeWorkItem(
* IN PWORK_QUEUE_ITEM Item,
* IN PWORKER_THREAD_ROUTINE Routine,
* IN PVOID Context)
*/
#define ExInitializeWorkItem(Item, \
Routine, \
Context) \
{ \
(Item)->WorkerRoutine = Routine; \
(Item)->Parameter = Context; \
(Item)->List.Flink = NULL; \
}
/*
* BOOLEAN
* ExIsFullZone(
* IN PZONE_HEADER Zone)
*/
#define ExIsFullZone(Zone) \
((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
NTOSAPI
VOID
DDKAPI
ExQueueWorkItem(
/*IN*/ PWORK_QUEUE_ITEM WorkItem,
/*IN*/ WORK_QUEUE_TYPE QueueType);
NTOSAPI
BOOLEAN
DDKAPI
ExIsObjectInFirstZoneSegment(
/*IN*/ PZONE_HEADER Zone,
/*IN*/ PVOID Object);
NTOSAPI
VOID
DDKAPI
ExReleaseResource(
/*IN*/ PERESOURCE Resource);
#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
#define ExAcquireResourceShared ExAcquireResourceSharedLite
#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
#define ExDeleteResource ExDeleteResourceLite
#define ExInitializeResource ExInitializeResourceLite
#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
NTOSAPI
INTERLOCKED_RESULT
DDKAPI
ExInterlockedDecrementLong(
/*IN*/ PLONG Addend,
/*IN*/ PKSPIN_LOCK Lock);
NTOSAPI
ULONG
DDKAPI
ExInterlockedExchangeUlong(
/*IN*/ PULONG Target,
/*IN*/ ULONG Value,
/*IN*/ PKSPIN_LOCK Lock);
NTOSAPI
INTERLOCKED_RESULT
DDKAPI
ExInterlockedIncrementLong(
/*IN*/ PLONG Addend,
/*IN*/ PKSPIN_LOCK Lock);
NTOSAPI
PVOID
DDKAPI
HalAllocateCommonBuffer(
/*IN*/ PADAPTER_OBJECT AdapterObject,
/*IN*/ ULONG Length,
/*OUT*/ PPHYSICAL_ADDRESS LogicalAddress,
/*IN*/ BOOLEAN CacheEnabled);
NTOSAPI
NTSTATUS
DDKAPI
HalAssignSlotResources(
/*IN*/ PUNICODE_STRING RegistryPath,
/*IN*/ PUNICODE_STRING DriverClassName,
/*IN*/ PDRIVER_OBJECT DriverObject,
/*IN*/ PDEVICE_OBJECT DeviceObject,
/*IN*/ INTERFACE_TYPE BusType,
/*IN*/ ULONG BusNumber,
/*IN*/ ULONG SlotNumber,
/*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources);
NTOSAPI
VOID
DDKAPI
HalFreeCommonBuffer(
/*IN*/ PADAPTER_OBJECT AdapterObject,
/*IN*/ ULONG Length,
/*IN*/ PHYSICAL_ADDRESS LogicalAddress,
/*IN*/ PVOID VirtualAddress,
/*IN*/ BOOLEAN CacheEnabled);
NTOSAPI
PADAPTER_OBJECT
DDKAPI
HalGetAdapter(
/*IN*/ PDEVICE_DESCRIPTION DeviceDescription,
/*IN OUT*/ PULONG NumberOfMapRegisters);
NTOSAPI
ULONG
DDKAPI
HalGetBusData(
/*IN*/ BUS_DATA_TYPE BusDataType,
/*IN*/ ULONG BusNumber,
/*IN*/ ULONG SlotNumber,
/*IN*/ PVOID Buffer,
/*IN*/ ULONG Length);
NTOSAPI
ULONG
DDKAPI
HalGetBusDataByOffset(
/*IN*/ BUS_DATA_TYPE BusDataType,
/*IN*/ ULONG BusNumber,
/*IN*/ ULONG SlotNumber,
/*IN*/ PVOID Buffer,
/*IN*/ ULONG Offset,
/*IN*/ ULONG Length);
NTOSAPI
ULONG
DDKAPI
HalGetDmaAlignmentRequirement(
VOID);
NTOSAPI
ULONG
DDKAPI
HalGetInterruptVector(
/*IN*/ INTERFACE_TYPE InterfaceType,
/*IN*/ ULONG BusNumber,
/*IN*/ ULONG BusInterruptLevel,
/*IN*/ ULONG BusInterruptVector,
/*OUT*/ PKIRQL Irql,
/*OUT*/ PKAFFINITY Affinity);
NTOSAPI
ULONG
DDKAPI
HalReadDmaCounter(
/*IN*/ PADAPTER_OBJECT AdapterObject);
NTOSAPI
ULONG
DDKAPI
HalSetBusData(
/*IN*/ BUS_DATA_TYPE BusDataType,
/*IN*/ ULONG BusNumber,
/*IN*/ ULONG SlotNumber,
/*IN*/ PVOID Buffer,
/*IN*/ ULONG Length);
NTOSAPI
ULONG
DDKAPI
HalSetBusDataByOffset(
/*IN*/ BUS_DATA_TYPE BusDataType,
/*IN*/ ULONG BusNumber,
/*IN*/ ULONG SlotNumber,
/*IN*/ PVOID Buffer,
/*IN*/ ULONG Offset,
/*IN*/ ULONG Length);
NTOSAPI
BOOLEAN
DDKAPI
HalTranslateBusAddress(
/*IN*/ INTERFACE_TYPE InterfaceType,
/*IN*/ ULONG BusNumber,
/*IN*/ PHYSICAL_ADDRESS BusAddress,
/*IN OUT*/ PULONG AddressSpace,
/*OUT*/ PPHYSICAL_ADDRESS TranslatedAddress);
NTOSAPI
NTSTATUS
DDKAPI
IoAllocateAdapterChannel(
/*IN*/ PADAPTER_OBJECT AdapterObject,
/*IN*/ PDEVICE_OBJECT DeviceObject,
/*IN*/ ULONG NumberOfMapRegisters,
/*IN*/ PDRIVER_CONTROL ExecutionRoutine,
/*IN*/ PVOID Context);
NTOSAPI
NTSTATUS
DDKAPI
IoAssignResources(
/*IN*/ PUNICODE_STRING RegistryPath,
/*IN*/ PUNICODE_STRING DriverClassName /*OPTIONAL*/,
/*IN*/ PDRIVER_OBJECT DriverObject,
/*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/,
/*IN*/ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources,
/*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources);
NTOSAPI
NTSTATUS
DDKAPI
IoAttachDeviceByPointer(
/*IN*/ PDEVICE_OBJECT SourceDevice,
/*IN*/ PDEVICE_OBJECT TargetDevice);
NTOSAPI
BOOLEAN
DDKAPI
IoFlushAdapterBuffers(
/*IN*/ PADAPTER_OBJECT AdapterObject,
/*IN*/ PMDL Mdl,
/*IN*/ PVOID MapRegisterBase,
/*IN*/ PVOID CurrentVa,
/*IN*/ ULONG Length,
/*IN*/ BOOLEAN WriteToDevice);
NTOSAPI
VOID
DDKAPI
IoFreeAdapterChannel(
/*IN*/ PADAPTER_OBJECT AdapterObject);
NTOSAPI
VOID
DDKAPI
IoFreeMapRegisters(
/*IN*/ PADAPTER_OBJECT AdapterObject,
/*IN*/ PVOID MapRegisterBase,
/*IN*/ ULONG NumberOfMapRegisters);
NTOSAPI
PHYSICAL_ADDRESS
DDKAPI
IoMapTransfer(
/*IN*/ PADAPTER_OBJECT AdapterObject,
/*IN*/ PMDL Mdl,
/*IN*/ PVOID MapRegisterBase,
/*IN*/ PVOID CurrentVa,
/*IN OUT*/ PULONG Length,
/*IN*/ BOOLEAN WriteToDevice);
NTOSAPI
PMDL
DDKAPI
MmCreateMdl(
/*IN*/ PMDL MemoryDescriptorList /*OPTIONAL*/,
/*IN*/ PVOID Base,
/*IN*/ SIZE_T Length);
NTOSAPI
BOOLEAN
DDKAPI
MmIsNonPagedSystemAddressValid(
/*IN*/ PVOID VirtualAddress);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlEnlargedIntegerMultiply(
/*IN*/ LONG Multiplicand,
/*IN*/ LONG Multiplier);
NTOSAPI
ULONG
DDKAPI
RtlEnlargedUnsignedDivide(
/*IN*/ ULARGE_INTEGER Dividend,
/*IN*/ ULONG Divisor,
/*IN OUT*/ PULONG Remainder);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlEnlargedUnsignedMultiply(
/*IN*/ ULONG Multiplicand,
/*IN*/ ULONG Multiplier);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlExtendedIntegerMultiply(
/*IN*/ LARGE_INTEGER Multiplicand,
/*IN*/ LONG Multiplier);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlExtendedLargeIntegerDivide(
/*IN*/ LARGE_INTEGER Dividend,
/*IN*/ ULONG Divisor,
/*IN OUT*/ PULONG Remainder);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlExtendedMagicDivide(
/*IN*/ LARGE_INTEGER Dividend,
/*IN*/ LARGE_INTEGER MagicDivisor,
/*IN*/ CCHAR ShiftCount);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlLargeIntegerAdd(
/*IN*/ LARGE_INTEGER Addend1,
/*IN*/ LARGE_INTEGER Addend2);
NTOSAPI
VOID
DDKAPI
RtlLargeIntegerAnd(
/*IN OUT*/ LARGE_INTEGER Result,
/*IN*/ LARGE_INTEGER Source,
/*IN*/ LARGE_INTEGER Mask);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlLargeIntegerArithmeticShift(
/*IN*/ LARGE_INTEGER LargeInteger,
/*IN*/ CCHAR ShiftCount);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlLargeIntegerDivide(
/*IN*/ LARGE_INTEGER Dividend,
/*IN*/ LARGE_INTEGER Divisor,
/*IN OUT*/ PLARGE_INTEGER Remainder);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerEqualTo(
/*IN*/ LARGE_INTEGER Operand1,
/*IN*/ LARGE_INTEGER Operand2);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerEqualToZero(
/*IN*/ LARGE_INTEGER Operand);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerGreaterOrEqualToZero(
/*IN*/ LARGE_INTEGER Operand);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerGreaterThan(
/*IN*/ LARGE_INTEGER Operand1,
/*IN*/ LARGE_INTEGER Operand2);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerGreaterThanOrEqualTo(
/*IN*/ LARGE_INTEGER Operand1,
/*IN*/ LARGE_INTEGER Operand2);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerGreaterThanZero(
/*IN*/ LARGE_INTEGER Operand);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerLessOrEqualToZero(
/*IN*/ LARGE_INTEGER Operand);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerLessThan(
/*IN*/ LARGE_INTEGER Operand1,
/*IN*/ LARGE_INTEGER Operand2);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerLessThanOrEqualTo(
/*IN*/ LARGE_INTEGER Operand1,
/*IN*/ LARGE_INTEGER Operand2);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerLessThanZero(
/*IN*/ LARGE_INTEGER Operand);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlLargeIntegerNegate(
/*IN*/ LARGE_INTEGER Subtrahend);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerNotEqualTo(
/*IN*/ LARGE_INTEGER Operand1,
/*IN*/ LARGE_INTEGER Operand2);
NTOSAPI
BOOLEAN
DDKAPI
RtlLargeIntegerNotEqualToZero(
/*IN*/ LARGE_INTEGER Operand);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlLargeIntegerShiftLeft(
/*IN*/ LARGE_INTEGER LargeInteger,
/*IN*/ CCHAR ShiftCount);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlLargeIntegerShiftRight(
/*IN*/ LARGE_INTEGER LargeInteger,
/*IN*/ CCHAR ShiftCount);
NTOSAPI
LARGE_INTEGER
DDKAPI
RtlLargeIntegerSubtract(
/*IN*/ LARGE_INTEGER Minuend,
/*IN*/ LARGE_INTEGER Subtrahend);
/*
* ULONG
* COMPUTE_PAGES_SPANNED(
* IN PVOID Va,
* IN ULONG Size)
*/
#define COMPUTE_PAGES_SPANNED(Va, \
Size) \
(ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
/*
** Architecture specific functions
*/
#ifdef _X86_
NTOSAPI
INTERLOCKED_RESULT
DDKAPI
Exi386InterlockedIncrementLong(
/*IN*/ PLONG Addend);
NTOSAPI
INTERLOCKED_RESULT
DDKFASTAPI
Exfi386InterlockedIncrementLong(
/*IN*/ PLONG Addend);
NTOSAPI
INTERLOCKED_RESULT
DDKAPI
Exi386InterlockedDecrementLong(
/*IN*/ PLONG Addend);
NTOSAPI
INTERLOCKED_RESULT
DDKFASTAPI
Exfi386InterlockedDecrementLong(
/*IN*/ PLONG Addend);
NTOSAPI
ULONG
DDKAPI
Exi386InterlockedExchangeUlong(
/*IN*/ PULONG Target,
/*IN*/ ULONG Value);
NTOSAPI
ULONG
DDKFASTAPI
Exfi386InterlockedExchangeUlong(
/*IN*/ PULONG Target,
/*IN*/ ULONG Value);
#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
#endif /* _X86_ */
#ifdef __cplusplus
}
#endif
#endif /* __WINNT4_H */