/* this file defines interfaces mainly exposed to device drivers and native nt dll's */ #ifndef __WINE_NTDDK_H #define __WINE_NTDDK_H #include "ntdef.h" #include "winnt.h" #include "winbase.h" /* fixme: should be taken out sometimes */ #ifdef __cplusplus extern "C" { #endif /****************** * asynchronous I/O */ #undef Status /* conflict with X11-includes*/ typedef struct _IO_STATUS_BLOCK { union { NTSTATUS Status; PVOID Pointer; } u; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; typedef VOID (NTAPI *PIO_APC_ROUTINE) ( PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved ); typedef enum _KEY_INFORMATION_CLASS { KeyBasicInformation, KeyNodeInformation, KeyFullInformation } KEY_INFORMATION_CLASS; typedef enum _KEY_VALUE_INFORMATION_CLASS { KeyValueBasicInformation, KeyValueFullInformation, KeyValuePartialInformation, KeyValueFullInformationAlign64, KeyValuePartialInformationAlign64 } KEY_VALUE_INFORMATION_CLASS; typedef enum _THREADINFOCLASS { ThreadBasicInformation, ThreadTimes, ThreadPriority, ThreadBasePriority, ThreadAffinityMask, ThreadImpersonationToken, ThreadDescriptorTableEntry, ThreadEnableAlignmentFaultFixup, ThreadEventPair_Reusable, ThreadQuerySetWin32StartAddress, ThreadZeroTlsCell, ThreadPerformanceCount, ThreadAmILastThread, ThreadIdealProcessor, ThreadPriorityBoost, ThreadSetTlsArrayAddress, ThreadIsIoPending, MaxThreadInfoClass } THREADINFOCLASS; typedef enum _FILE_INFORMATION_CLASS { FileDirectoryInformation = 1, FileFullDirectoryInformation, FileBothDirectoryInformation, FileBasicInformation, FileStandardInformation, FileInternalInformation, FileEaInformation, FileAccessInformation, FileNameInformation, FileRenameInformation, FileLinkInformation, FileNamesInformation, FileDispositionInformation, FilePositionInformation, FileFullEaInformation, FileModeInformation, FileAlignmentInformation, FileAllInformation, FileAllocationInformation, FileEndOfFileInformation, FileAlternateNameInformation, FileStreamInformation, FilePipeInformation, FilePipeLocalInformation, FilePipeRemoteInformation, FileMailslotQueryInformation, FileMailslotSetInformation, FileCompressionInformation, FileObjectIdInformation, FileCompletionInformation, FileMoveClusterInformation, FileQuotaInformation, FileReparsePointInformation, FileNetworkOpenInformation, FileAttributeTagInformation, FileTrackingInformation, FileMaximumInformation } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; typedef enum _FSINFOCLASS { FileFsVolumeInformation = 1, FileFsLabelInformation, FileFsSizeInformation, FileFsDeviceInformation, FileFsAttributeInformation, FileFsControlInformation, FileFsFullSizeInformation, FileFsObjectIdInformation, FileFsMaximumInformation } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; typedef enum _SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 } SECTION_INHERIT; /* placeholder */ typedef enum _OBJECT_INFORMATION_CLASS { DunnoTheConstants1 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS; /* * NtQuerySystemInformation */ typedef enum SYSTEM_INFORMATION_CLASS { Unknown1 = 1, Unknown2, Unknown3, Unknown4, SystemPerformanceInformation } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS; /* reading coffee grounds... */ typedef struct _THREAD_INFO { DWORD Unknown1[6]; DWORD ThreadID; DWORD Unknown2[3]; DWORD Status; DWORD WaitReason; DWORD Unknown3[4]; } THREAD_INFO, PTHREAD_INFO; typedef struct _VM_COUNTERS_ { ULONG PeakVirtualSize; ULONG VirtualSize; ULONG PageFaultCount; ULONG PeakWorkingSetSize; ULONG WorkingSetSize; ULONG QuotaPeakPagedPoolUsage; ULONG QuotaPagedPoolUsage; ULONG QuotaPeakNonPagedPoolUsage; ULONG QuotaNonPagedPoolUsage; ULONG PagefileUsage; ULONG PeakPagefileUsage; } VM_COUNTERS, *PVM_COUNTERS; typedef struct _PROCESS_INFO { DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/ DWORD ThreadCount; /* 04 number of ThreadInfo member ok */ DWORD Unknown1[6]; FILETIME CreationTime; /* 20 */ DWORD Unknown2[5]; PWCHAR ProcessName; /* 3c ok */ DWORD BasePriority; DWORD ProcessID; /* 44 ok*/ DWORD ParentProcessID; DWORD HandleCount; DWORD Unknown3[2]; /* 50 */ ULONG PeakVirtualSize; ULONG VirtualSize; ULONG PageFaultCount; ULONG PeakWorkingSetSize; ULONG WorkingSetSize; ULONG QuotaPeakPagedPoolUsage; ULONG QuotaPagedPoolUsage; ULONG QuotaPeakNonPagedPoolUsage; ULONG QuotaNonPagedPoolUsage; ULONG PagefileUsage; ULONG PeakPagefileUsage; DWORD PrivateBytes; DWORD Unknown6[4]; THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/ } PROCESS_INFO, PPROCESS_INFO; NTSTATUS WINAPI NtQuerySystemInformation( IN SYSTEM_INFORMATION_CLASS SystemInformationClass, OUT PVOID SystemInformation, IN ULONG Length, OUT PULONG ResultLength); /* * system configuration */ typedef struct _SYSTEM_TIME_ADJUSTMENT { ULONG TimeAdjustment; BOOLEAN TimeAdjustmentDisabled; } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT; typedef struct _SYSTEM_CONFIGURATION_INFO { union { ULONG OemId; struct { WORD ProcessorArchitecture; WORD Reserved; } tag1; } tag2; ULONG PageSize; PVOID MinimumApplicationAddress; PVOID MaximumApplicationAddress; ULONG ActiveProcessorMask; ULONG NumberOfProcessors; ULONG ProcessorType; ULONG AllocationGranularity; WORD ProcessorLevel; WORD ProcessorRevision; } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO; typedef struct _SYSTEM_CACHE_INFORMATION { ULONG CurrentSize; ULONG PeakSize; ULONG PageFaultCount; ULONG MinimumWorkingSet; ULONG MaximumWorkingSet; ULONG Unused[4]; } SYSTEM_CACHE_INFORMATION; /* * NtQueryProcessInformation */ /* parameter ProcessInformationClass */ typedef enum _PROCESSINFOCLASS { ProcessBasicInformation, ProcessQuotaLimits, ProcessIoCounters, ProcessVmCounters, ProcessTimes, ProcessBasePriority, ProcessRaisePriority, ProcessDebugPort, ProcessExceptionPort, ProcessAccessToken, ProcessLdtInformation, ProcessLdtSize, ProcessDefaultHardErrorMode, ProcessIoPortHandlers, ProcessPooledUsageAndLimits, ProcessWorkingSetWatch, ProcessUserModeIOPL, ProcessEnableAlignmentFaultFixup, ProcessPriorityClass, ProcessWx86Information, ProcessHandleCount, ProcessAffinityMask, ProcessPriorityBoost, ProcessDeviceMap, ProcessSessionInformation, ProcessForegroundInformation, ProcessWow64Information, MaxProcessInfoClass } PROCESSINFOCLASS; /* parameter ProcessInformation (depending on ProcessInformationClass) */ typedef struct _PROCESS_BASIC_INFORMATION { DWORD ExitStatus; DWORD PebBaseAddress; DWORD AffinityMask; DWORD BasePriority; ULONG UniqueProcessId; ULONG InheritedFromUniqueProcessId; } PROCESS_BASIC_INFORMATION; NTSTATUS WINAPI NtQueryInformationProcess( IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, OUT PVOID ProcessInformation, IN ULONG ProcessInformationLength, OUT PULONG ReturnLength); #define NtCurrentProcess() ( (HANDLE) -1 ) /* * timer */ typedef enum _TIMER_TYPE { NotificationTimer, SynchronizationTimer } TIMER_TYPE; /* * token functions */ NTSTATUS WINAPI NtOpenProcessToken( HANDLE ProcessHandle, DWORD DesiredAccess, HANDLE *TokenHandle); NTSTATUS WINAPI NtOpenThreadToken( HANDLE ThreadHandle, DWORD DesiredAccess, BOOLEAN OpenAsSelf, HANDLE *TokenHandle); NTSTATUS WINAPI NtAdjustPrivilegesToken( IN HANDLE TokenHandle, IN BOOLEAN DisableAllPrivileges, IN PTOKEN_PRIVILEGES NewState, IN DWORD BufferLength, OUT PTOKEN_PRIVILEGES PreviousState, OUT PDWORD ReturnLength); NTSTATUS WINAPI NtQueryInformationToken( HANDLE token, DWORD tokeninfoclass, LPVOID tokeninfo, DWORD tokeninfolength, LPDWORD retlen ); /* * sid functions */ BOOLEAN WINAPI RtlAllocateAndInitializeSid ( PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, DWORD nSubAuthorityCount, DWORD x3, DWORD x4, DWORD x5, DWORD x6, DWORD x7, DWORD x8, DWORD x9, DWORD x10, PSID pSid); DWORD WINAPI RtlEqualSid(DWORD x1,DWORD x2); DWORD WINAPI RtlFreeSid(DWORD x1); DWORD WINAPI RtlLengthRequiredSid(DWORD nrofsubauths); DWORD WINAPI RtlLengthSid(PSID sid); DWORD WINAPI RtlInitializeSid(PSID PSID,PSID_IDENTIFIER_AUTHORITY PSIDauth, DWORD c); LPDWORD WINAPI RtlSubAuthoritySid(PSID PSID,DWORD nr); LPBYTE WINAPI RtlSubAuthorityCountSid(PSID PSID); DWORD WINAPI RtlCopySid(DWORD len,PSID to,PSID from); /* * security descriptor functions */ NTSTATUS WINAPI RtlCreateSecurityDescriptor( PSECURITY_DESCRIPTOR lpsd, DWORD rev); NTSTATUS WINAPI RtlValidSecurityDescriptor( PSECURITY_DESCRIPTOR SecurityDescriptor); ULONG WINAPI RtlLengthSecurityDescriptor( PSECURITY_DESCRIPTOR SecurityDescriptor); NTSTATUS WINAPI RtlGetDaclSecurityDescriptor( IN PSECURITY_DESCRIPTOR pSecurityDescriptor, OUT PBOOLEAN lpbDaclPresent, OUT PACL *pDacl, OUT PBOOLEAN lpbDaclDefaulted); NTSTATUS WINAPI RtlSetDaclSecurityDescriptor ( PSECURITY_DESCRIPTOR lpsd, BOOLEAN daclpresent, PACL dacl, BOOLEAN dacldefaulted ); NTSTATUS WINAPI RtlGetSaclSecurityDescriptor( IN PSECURITY_DESCRIPTOR pSecurityDescriptor, OUT PBOOLEAN lpbSaclPresent, OUT PACL *pSacl, OUT PBOOLEAN lpbSaclDefaulted); NTSTATUS WINAPI RtlSetSaclSecurityDescriptor ( PSECURITY_DESCRIPTOR lpsd, BOOLEAN saclpresent, PACL sacl, BOOLEAN sacldefaulted); NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor( PSECURITY_DESCRIPTOR SecurityDescriptor, PSID *Owner, PBOOLEAN OwnerDefaulted); NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor( PSECURITY_DESCRIPTOR lpsd, PSID owner, BOOLEAN ownerdefaulted); NTSTATUS WINAPI RtlSetGroupSecurityDescriptor ( PSECURITY_DESCRIPTOR lpsd, PSID group, BOOLEAN groupdefaulted); NTSTATUS WINAPI RtlGetGroupSecurityDescriptor( PSECURITY_DESCRIPTOR SecurityDescriptor, PSID *Group, PBOOLEAN GroupDefaulted); /* ############################## ###### ACL FUNCTIONS ###### ############################## */ DWORD WINAPI RtlCreateAcl(PACL acl,DWORD size,DWORD rev); BOOLEAN WINAPI RtlFirstFreeAce( PACL acl, PACE_HEADER *x); NTSTATUS WINAPI RtlAddAce( PACL acl, DWORD rev, DWORD xnrofaces, PACE_HEADER acestart, DWORD acelen); DWORD WINAPI RtlAddAccessAllowedAce(DWORD x1,DWORD x2,DWORD x3,DWORD x4); DWORD WINAPI RtlGetAce(PACL pAcl,DWORD dwAceIndex,LPVOID *pAce ); /* * string functions */ DWORD WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING uni,PANSI_STRING ansi,BOOLEAN doalloc); DWORD WINAPI RtlOemStringToUnicodeString(PUNICODE_STRING uni,PSTRING ansi,BOOLEAN doalloc); DWORD WINAPI RtlMultiByteToUnicodeN(LPWSTR unistr,DWORD unilen,LPDWORD reslen,LPSTR oemstr,DWORD oemlen); DWORD WINAPI RtlOemToUnicodeN(LPWSTR unistr,DWORD unilen,LPDWORD reslen,LPSTR oemstr,DWORD oemlen); VOID WINAPI RtlInitAnsiString(PANSI_STRING target,LPCSTR source); VOID WINAPI RtlInitString(PSTRING target,LPCSTR source); VOID WINAPI RtlInitUnicodeString(PUNICODE_STRING target,LPCWSTR source); VOID WINAPI RtlFreeUnicodeString(PUNICODE_STRING str); VOID WINAPI RtlFreeAnsiString(PANSI_STRING AnsiString); DWORD WINAPI RtlUnicodeToOemN(LPSTR oemstr,DWORD oemlen,LPDWORD reslen,LPWSTR unistr,DWORD unilen); DWORD WINAPI RtlUnicodeStringToOemString(PANSI_STRING oem,PUNICODE_STRING uni,BOOLEAN alloc); DWORD WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING oem,PUNICODE_STRING uni,BOOLEAN alloc); DWORD WINAPI RtlEqualUnicodeString(PUNICODE_STRING s1,PUNICODE_STRING s2,DWORD x); DWORD WINAPI RtlUpcaseUnicodeString(PUNICODE_STRING dest,PUNICODE_STRING src,BOOLEAN doalloc); UINT WINAPI RtlxOemStringToUnicodeSize(PSTRING str); UINT WINAPI RtlxAnsiStringToUnicodeSize(PANSI_STRING str); DWORD WINAPI RtlIsTextUnicode(LPVOID buf, DWORD len, DWORD *pf); NTSTATUS WINAPI RtlCompareUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive); /* * resource functions */ typedef struct _RTL_RWLOCK { CRITICAL_SECTION rtlCS; HANDLE hSharedReleaseSemaphore; UINT uSharedWaiters; HANDLE hExclusiveReleaseSemaphore; UINT uExclusiveWaiters; INT iNumberActive; HANDLE hOwningThreadId; DWORD dwTimeoutBoost; PVOID pDebugInfo; } RTL_RWLOCK, *LPRTL_RWLOCK; VOID WINAPI RtlInitializeResource( LPRTL_RWLOCK); VOID WINAPI RtlDeleteResource( LPRTL_RWLOCK); BYTE WINAPI RtlAcquireResourceExclusive( LPRTL_RWLOCK, BYTE fWait); BYTE WINAPI RtlAcquireResourceShared( LPRTL_RWLOCK, BYTE fWait); VOID WINAPI RtlReleaseResource( LPRTL_RWLOCK); VOID WINAPI RtlDumpResource( LPRTL_RWLOCK); /* time functions */ typedef struct _TIME_FIELDS { CSHORT Year; CSHORT Month; CSHORT Day; CSHORT Hour; CSHORT Minute; CSHORT Second; CSHORT Milliseconds; CSHORT Weekday; } TIME_FIELDS; typedef TIME_FIELDS *PTIME_FIELDS; VOID WINAPI RtlSystemTimeToLocalTime( IN PLARGE_INTEGER SystemTime, OUT PLARGE_INTEGER LocalTime); VOID WINAPI RtlTimeToTimeFields( PLARGE_INTEGER liTime, PTIME_FIELDS TimeFields); BOOLEAN WINAPI RtlTimeFieldsToTime( PTIME_FIELDS tfTimeFields, PLARGE_INTEGER Time); VOID WINAPI RtlTimeToElapsedTimeFields( PLARGE_INTEGER liTime, PTIME_FIELDS TimeFields); BOOLEAN WINAPI RtlTimeToSecondsSince1980( LPFILETIME ft, LPDWORD timeret); BOOLEAN WINAPI RtlTimeToSecondsSince1970( LPFILETIME ft, LPDWORD timeret); /* heap functions */ /* Data structure for heap definition. This includes various sizing parameters and callback routines, which, if left NULL, result in default behavior */ typedef struct { ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */ ULONG Unknown[11]; } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION; HANDLE WINAPI RtlCreateHeap( ULONG Flags, PVOID BaseAddress, ULONG SizeToReserve, ULONG SizeToCommit, PVOID Unknown, PRTL_HEAP_DEFINITION Definition); PVOID WINAPI RtlAllocateHeap( HANDLE Heap, ULONG Flags, ULONG Size); BOOLEAN WINAPI RtlFreeHeap( HANDLE Heap, ULONG Flags, PVOID Address); /* * misc */ void WINAPIV DbgPrint(LPCSTR fmt, ...); DWORD WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL); void WINAPI RtlRaiseException(PEXCEPTION_RECORD); void WINAPI RtlRaiseStatus(NTSTATUS); void WINAPI RtlUnwind(PEXCEPTION_FRAME,LPVOID,PEXCEPTION_RECORD,DWORD); VOID WINAPI RtlAcquirePebLock(void); VOID WINAPI RtlReleasePebLock(void); DWORD WINAPI RtlAdjustPrivilege(DWORD x1,DWORD x2,DWORD x3,DWORD x4); DWORD WINAPI RtlIntegerToChar(DWORD x1,DWORD x2,DWORD x3,DWORD x4); DWORD WINAPI RtlSetEnvironmentVariable(DWORD x1,PUNICODE_STRING key,PUNICODE_STRING val); DWORD WINAPI RtlNewSecurityObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6); DWORD WINAPI RtlDeleteSecurityObject(DWORD x1); LPVOID WINAPI RtlNormalizeProcessParams(LPVOID x); DWORD WINAPI RtlNtStatusToDosError(DWORD error); BOOLEAN WINAPI RtlGetNtProductType(LPDWORD type); INT WINAPI RtlExtendedLargeIntegerDivide(LARGE_INTEGER dividend, DWORD divisor, LPDWORD rest); long long WINAPI RtlExtendedIntegerMultiply(LARGE_INTEGER factor1,INT factor2); DWORD WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING String); DWORD WINAPI RtlOpenCurrentUser(DWORD x1, DWORD *x2); BOOLEAN WINAPI RtlDosPathNameToNtPathName_U( LPWSTR from,PUNICODE_STRING us,DWORD x2,DWORD x3); DWORD WINAPI RtlCreateEnvironment(DWORD x1,DWORD x2); DWORD WINAPI RtlDestroyEnvironment(DWORD x); DWORD WINAPI RtlQueryEnvironmentVariable_U(DWORD x1,PUNICODE_STRING key,PUNICODE_STRING val) ; BOOL WINAPI IsValidSid(PSID); BOOL WINAPI EqualSid(PSID,PSID); BOOL WINAPI EqualPrefixSid(PSID,PSID); DWORD WINAPI GetSidLengthRequired(BYTE); BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD, DWORD,DWORD,DWORD,DWORD,DWORD,DWORD, DWORD,PSID*); VOID* WINAPI FreeSid(PSID); BOOL WINAPI InitializeSecurityDescriptor(SECURITY_DESCRIPTOR*,DWORD); BOOL WINAPI InitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE); DWORD* WINAPI GetSidSubAuthority(PSID,DWORD); BYTE * WINAPI GetSidSubAuthorityCount(PSID); DWORD WINAPI GetLengthSid(PSID); BOOL WINAPI CopySid(DWORD,PSID,PSID); BOOL WINAPI LookupAccountSidA(LPCSTR,PSID,LPCSTR,LPDWORD,LPCSTR,LPDWORD, PSID_NAME_USE); BOOL WINAPI LookupAccountSidW(LPCWSTR,PSID,LPCWSTR,LPDWORD,LPCWSTR,LPDWORD, PSID_NAME_USE); PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(PSID); #ifdef __cplusplus } #endif #endif