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

624 lines
11 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 */