Fix compilation errors on FreeBSD.
[wine/dibdrv.git] / include / ntddk.h
bloba4cd777783db040f8a34585e6af992fecb6dbd27
1 /*
2 this file defines interfaces mainly exposed to device drivers and
3 native nt dll's
5 */
6 #ifndef __WINE_NTDDK_H
7 #define __WINE_NTDDK_H
9 #include "ntdef.h"
10 #include "winnt.h"
11 #include "winreg.h"
12 #include "winbase.h" /* fixme: should be taken out sometimes */
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
18 /******************
19 * asynchronous I/O
21 #undef Status /* conflict with X11-includes*/
23 typedef struct _IO_STATUS_BLOCK
25 union {
26 NTSTATUS Status;
27 PVOID Pointer;
28 } DUMMYUNIONNAME;
29 ULONG_PTR Information;
30 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
32 typedef VOID NTAPI (*PIO_APC_ROUTINE) ( PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved );
35 registry
38 /* key information */
39 typedef struct _KEY_BASIC_INFORMATION {
40 LARGE_INTEGER LastWriteTime;
41 ULONG TitleIndex;
42 ULONG NameLength;
43 WCHAR Name[1];
44 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
46 typedef struct _KEY_NODE_INFORMATION
48 LARGE_INTEGER LastWriteTime;
49 ULONG TitleIndex;
50 ULONG ClassOffset;
51 ULONG ClassLength;
52 ULONG NameLength;
53 WCHAR Name[1];
54 /* Class[1]; */
55 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
57 typedef struct _KEY_FULL_INFORMATION
59 LARGE_INTEGER LastWriteTime;
60 ULONG TitleIndex;
61 ULONG ClassOffset;
62 ULONG ClassLength;
63 ULONG SubKeys;
64 ULONG MaxNameLen;
65 ULONG MaxClassLen;
66 ULONG Values;
67 ULONG MaxValueNameLen;
68 ULONG MaxValueDataLen;
69 WCHAR Class[1];
70 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
72 typedef enum _KEY_INFORMATION_CLASS
74 KeyBasicInformation,
75 KeyNodeInformation,
76 KeyFullInformation
77 } KEY_INFORMATION_CLASS;
79 typedef struct _KEY_VALUE_ENTRY
81 PUNICODE_STRING ValueName;
82 ULONG DataLength;
83 ULONG DataOffset;
84 ULONG Type;
85 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
87 /* value information */
88 typedef struct _KEY_VALUE_BASIC_INFORMATION
90 ULONG TitleIndex;
91 ULONG Type;
92 ULONG NameLength;
93 WCHAR Name[1];
94 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
96 typedef struct _KEY_VALUE_FULL_INFORMATION
98 ULONG TitleIndex;
99 ULONG Type;
100 ULONG DataOffset;
101 ULONG DataLength;
102 ULONG NameLength;
103 WCHAR Name[1];
104 /* UCHAR Data[1];*/
105 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
107 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
109 ULONG TitleIndex;
110 ULONG Type;
111 ULONG DataLength;
112 UCHAR Data[1];
113 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
115 typedef enum _KEY_VALUE_INFORMATION_CLASS
117 KeyValueBasicInformation,
118 KeyValueFullInformation,
119 KeyValuePartialInformation,
120 KeyValueFullInformationAlign64,
121 KeyValuePartialInformationAlign64
122 } KEY_VALUE_INFORMATION_CLASS;
124 NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(
125 PUNICODE_STRING KeyPath);
127 /* thread information */
129 typedef enum _THREADINFOCLASS
130 { ThreadBasicInformation,
131 ThreadTimes,
132 ThreadPriority,
133 ThreadBasePriority,
134 ThreadAffinityMask,
135 ThreadImpersonationToken,
136 ThreadDescriptorTableEntry,
137 ThreadEnableAlignmentFaultFixup,
138 ThreadEventPair_Reusable,
139 ThreadQuerySetWin32StartAddress,
140 ThreadZeroTlsCell,
141 ThreadPerformanceCount,
142 ThreadAmILastThread,
143 ThreadIdealProcessor,
144 ThreadPriorityBoost,
145 ThreadSetTlsArrayAddress,
146 ThreadIsIoPending,
147 MaxThreadInfoClass
148 } THREADINFOCLASS;
150 /* file information */
152 typedef enum _FILE_INFORMATION_CLASS {
153 FileDirectoryInformation = 1,
154 FileFullDirectoryInformation,
155 FileBothDirectoryInformation,
156 FileBasicInformation,
157 FileStandardInformation,
158 FileInternalInformation,
159 FileEaInformation,
160 FileAccessInformation,
161 FileNameInformation,
162 FileRenameInformation,
163 FileLinkInformation,
164 FileNamesInformation,
165 FileDispositionInformation,
166 FilePositionInformation,
167 FileFullEaInformation,
168 FileModeInformation,
169 FileAlignmentInformation,
170 FileAllInformation,
171 FileAllocationInformation,
172 FileEndOfFileInformation,
173 FileAlternateNameInformation,
174 FileStreamInformation,
175 FilePipeInformation,
176 FilePipeLocalInformation,
177 FilePipeRemoteInformation,
178 FileMailslotQueryInformation,
179 FileMailslotSetInformation,
180 FileCompressionInformation,
181 FileObjectIdInformation,
182 FileCompletionInformation,
183 FileMoveClusterInformation,
184 FileQuotaInformation,
185 FileReparsePointInformation,
186 FileNetworkOpenInformation,
187 FileAttributeTagInformation,
188 FileTrackingInformation,
189 FileMaximumInformation
190 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
192 typedef enum _FSINFOCLASS {
193 FileFsVolumeInformation = 1,
194 FileFsLabelInformation,
195 FileFsSizeInformation,
196 FileFsDeviceInformation,
197 FileFsAttributeInformation,
198 FileFsControlInformation,
199 FileFsFullSizeInformation,
200 FileFsObjectIdInformation,
201 FileFsMaximumInformation
202 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
204 typedef enum _SECTION_INHERIT
206 ViewShare = 1,
207 ViewUnmap = 2
209 } SECTION_INHERIT;
211 /* object information */
213 typedef enum _OBJECT_INFORMATION_CLASS
215 DunnoTheConstants1
217 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
220 /* system information */
222 typedef enum SYSTEM_INFORMATION_CLASS
223 { Unknown1 = 1,
224 Unknown2,
225 Unknown3,
226 Unknown4,
227 SystemPerformanceInformation
228 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
230 /* reading coffee grounds... */
231 typedef struct _THREAD_INFO
232 { DWORD Unknown1[6];
233 DWORD ThreadID;
234 DWORD Unknown2[3];
235 DWORD Status;
236 DWORD WaitReason;
237 DWORD Unknown3[4];
238 } THREAD_INFO, PTHREAD_INFO;
240 typedef struct _VM_COUNTERS_
241 { ULONG PeakVirtualSize;
242 ULONG VirtualSize;
243 ULONG PageFaultCount;
244 ULONG PeakWorkingSetSize;
245 ULONG WorkingSetSize;
246 ULONG QuotaPeakPagedPoolUsage;
247 ULONG QuotaPagedPoolUsage;
248 ULONG QuotaPeakNonPagedPoolUsage;
249 ULONG QuotaNonPagedPoolUsage;
250 ULONG PagefileUsage;
251 ULONG PeakPagefileUsage;
252 } VM_COUNTERS, *PVM_COUNTERS;
254 /* process information */
256 typedef struct _PROCESS_INFO
257 { DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
258 DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
259 DWORD Unknown1[6];
260 FILETIME CreationTime; /* 20 */
261 DWORD Unknown2[5];
262 PWCHAR ProcessName; /* 3c ok */
263 DWORD BasePriority;
264 DWORD ProcessID; /* 44 ok*/
265 DWORD ParentProcessID;
266 DWORD HandleCount;
267 DWORD Unknown3[2]; /* 50 */
268 ULONG PeakVirtualSize;
269 ULONG VirtualSize;
270 ULONG PageFaultCount;
271 ULONG PeakWorkingSetSize;
272 ULONG WorkingSetSize;
273 ULONG QuotaPeakPagedPoolUsage;
274 ULONG QuotaPagedPoolUsage;
275 ULONG QuotaPeakNonPagedPoolUsage;
276 ULONG QuotaNonPagedPoolUsage;
277 ULONG PagefileUsage;
278 ULONG PeakPagefileUsage;
279 DWORD PrivateBytes;
280 DWORD Unknown6[4];
281 THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
282 } PROCESS_INFO, PPROCESS_INFO;
284 NTSTATUS WINAPI NtQuerySystemInformation(
285 IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
286 OUT PVOID SystemInformation,
287 IN ULONG Length,
288 OUT PULONG ResultLength);
291 * system configuration
295 typedef struct _SYSTEM_TIME_ADJUSTMENT
297 ULONG TimeAdjustment;
298 BOOLEAN TimeAdjustmentDisabled;
300 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
302 typedef struct _SYSTEM_CONFIGURATION_INFO
304 union
305 { ULONG OemId;
306 struct
307 { WORD ProcessorArchitecture;
308 WORD Reserved;
309 } tag1;
310 } tag2;
311 ULONG PageSize;
312 PVOID MinimumApplicationAddress;
313 PVOID MaximumApplicationAddress;
314 ULONG ActiveProcessorMask;
315 ULONG NumberOfProcessors;
316 ULONG ProcessorType;
317 ULONG AllocationGranularity;
318 WORD ProcessorLevel;
319 WORD ProcessorRevision;
321 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
324 typedef struct _SYSTEM_CACHE_INFORMATION
326 ULONG CurrentSize;
327 ULONG PeakSize;
328 ULONG PageFaultCount;
329 ULONG MinimumWorkingSet;
330 ULONG MaximumWorkingSet;
331 ULONG Unused[4];
333 } SYSTEM_CACHE_INFORMATION;
336 * NtQueryProcessInformation
339 /* parameter ProcessInformationClass */
341 typedef enum _PROCESSINFOCLASS
342 { ProcessBasicInformation,
343 ProcessQuotaLimits,
344 ProcessIoCounters,
345 ProcessVmCounters,
346 ProcessTimes,
347 ProcessBasePriority,
348 ProcessRaisePriority,
349 ProcessDebugPort,
350 ProcessExceptionPort,
351 ProcessAccessToken,
352 ProcessLdtInformation,
353 ProcessLdtSize,
354 ProcessDefaultHardErrorMode,
355 ProcessIoPortHandlers,
356 ProcessPooledUsageAndLimits,
357 ProcessWorkingSetWatch,
358 ProcessUserModeIOPL,
359 ProcessEnableAlignmentFaultFixup,
360 ProcessPriorityClass,
361 ProcessWx86Information,
362 ProcessHandleCount,
363 ProcessAffinityMask,
364 ProcessPriorityBoost,
365 ProcessDeviceMap,
366 ProcessSessionInformation,
367 ProcessForegroundInformation,
368 ProcessWow64Information,
369 MaxProcessInfoClass
370 } PROCESSINFOCLASS;
372 /* parameter ProcessInformation (depending on ProcessInformationClass) */
374 typedef struct _PROCESS_BASIC_INFORMATION
375 { DWORD ExitStatus;
376 DWORD PebBaseAddress;
377 DWORD AffinityMask;
378 DWORD BasePriority;
379 ULONG UniqueProcessId;
380 ULONG InheritedFromUniqueProcessId;
381 } PROCESS_BASIC_INFORMATION;
383 NTSTATUS WINAPI NtQueryInformationProcess(
384 IN HANDLE ProcessHandle,
385 IN PROCESSINFOCLASS ProcessInformationClass,
386 OUT PVOID ProcessInformation,
387 IN ULONG ProcessInformationLength,
388 OUT PULONG ReturnLength);
390 #define NtCurrentProcess() ( (HANDLE) -1 )
393 * timer
396 typedef enum _TIMER_TYPE
398 NotificationTimer,
399 SynchronizationTimer
401 } TIMER_TYPE;
403 /* token functions */
405 NTSTATUS WINAPI NtOpenProcessToken(
406 HANDLE ProcessHandle,
407 DWORD DesiredAccess,
408 HANDLE *TokenHandle);
410 NTSTATUS WINAPI NtOpenThreadToken(
411 HANDLE ThreadHandle,
412 DWORD DesiredAccess,
413 BOOLEAN OpenAsSelf,
414 HANDLE *TokenHandle);
416 NTSTATUS WINAPI NtAdjustPrivilegesToken(
417 IN HANDLE TokenHandle,
418 IN BOOLEAN DisableAllPrivileges,
419 IN PTOKEN_PRIVILEGES NewState,
420 IN DWORD BufferLength,
421 OUT PTOKEN_PRIVILEGES PreviousState,
422 OUT PDWORD ReturnLength);
424 NTSTATUS WINAPI NtQueryInformationToken(
425 HANDLE token,
426 DWORD tokeninfoclass,
427 LPVOID tokeninfo,
428 DWORD tokeninfolength,
429 LPDWORD retlen );
431 /* sid functions */
433 BOOLEAN WINAPI RtlAllocateAndInitializeSid (
434 PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
435 BYTE nSubAuthorityCount,
436 DWORD nSubAuthority0, DWORD nSubAuthority1,
437 DWORD nSubAuthority2, DWORD nSubAuthority3,
438 DWORD nSubAuthority4, DWORD nSubAuthority5,
439 DWORD nSubAuthority6, DWORD nSubAuthority7,
440 PSID *pSid );
442 BOOL WINAPI RtlInitializeSid(
443 PSID pSid,
444 PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
445 BYTE nSubAuthorityCount);
447 DWORD WINAPI RtlFreeSid(
448 PSID pSid);
450 BOOL WINAPI RtlEqualSid(
451 PSID pSid1,
452 PSID pSid2 );
454 DWORD WINAPI RtlLengthRequiredSid(
455 DWORD nrofsubauths);
457 DWORD WINAPI RtlLengthSid(
458 PSID sid);
460 LPDWORD WINAPI RtlSubAuthoritySid(
461 PSID PSID,
462 DWORD nr);
464 LPBYTE WINAPI RtlSubAuthorityCountSid(
465 PSID pSid);
467 DWORD WINAPI RtlCopySid(
468 DWORD len,
469 PSID to,
470 PSID from);
472 BOOL WINAPI RtlValidSid(
473 PSID pSid);
475 BOOL WINAPI RtlEqualPrefixSid(
476 PSID pSid1,
477 PSID pSid2);
479 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(
480 PSID pSid );
482 /* security descriptor functions */
484 NTSTATUS WINAPI RtlCreateSecurityDescriptor(
485 PSECURITY_DESCRIPTOR lpsd,
486 DWORD rev);
488 NTSTATUS WINAPI RtlValidSecurityDescriptor(
489 PSECURITY_DESCRIPTOR SecurityDescriptor);
491 ULONG WINAPI RtlLengthSecurityDescriptor(
492 PSECURITY_DESCRIPTOR SecurityDescriptor);
494 NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(
495 IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
496 OUT PBOOLEAN lpbDaclPresent,
497 OUT PACL *pDacl,
498 OUT PBOOLEAN lpbDaclDefaulted);
500 NTSTATUS WINAPI RtlSetDaclSecurityDescriptor (
501 PSECURITY_DESCRIPTOR lpsd,
502 BOOLEAN daclpresent,
503 PACL dacl,
504 BOOLEAN dacldefaulted );
506 NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(
507 IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
508 OUT PBOOLEAN lpbSaclPresent,
509 OUT PACL *pSacl,
510 OUT PBOOLEAN lpbSaclDefaulted);
512 NTSTATUS WINAPI RtlSetSaclSecurityDescriptor (
513 PSECURITY_DESCRIPTOR lpsd,
514 BOOLEAN saclpresent,
515 PACL sacl,
516 BOOLEAN sacldefaulted);
518 NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(
519 PSECURITY_DESCRIPTOR SecurityDescriptor,
520 PSID *Owner,
521 PBOOLEAN OwnerDefaulted);
523 NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(
524 PSECURITY_DESCRIPTOR lpsd,
525 PSID owner,
526 BOOLEAN ownerdefaulted);
528 NTSTATUS WINAPI RtlSetGroupSecurityDescriptor (
529 PSECURITY_DESCRIPTOR lpsd,
530 PSID group,
531 BOOLEAN groupdefaulted);
533 NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(
534 PSECURITY_DESCRIPTOR SecurityDescriptor,
535 PSID *Group,
536 PBOOLEAN GroupDefaulted);
538 NTSTATUS WINAPI RtlMakeSelfRelativeSD(
539 IN PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
540 IN PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
541 IN OUT LPDWORD lpdwBufferLength);
543 NTSTATUS WINAPI RtlGetControlSecurityDescriptor(
544 PSECURITY_DESCRIPTOR pSecurityDescriptor,
545 PSECURITY_DESCRIPTOR_CONTROL pControl,
546 LPDWORD lpdwRevision);
548 /* acl functions */
550 NTSTATUS WINAPI RtlCreateAcl(
551 PACL acl,
552 DWORD size,
553 DWORD rev);
555 BOOLEAN WINAPI RtlFirstFreeAce(
556 PACL acl,
557 PACE_HEADER *x);
559 NTSTATUS WINAPI RtlAddAce(
560 PACL acl,
561 DWORD rev,
562 DWORD xnrofaces,
563 PACE_HEADER acestart,
564 DWORD acelen);
566 BOOL WINAPI RtlAddAccessAllowedAce(
567 IN OUT PACL pAcl,
568 IN DWORD dwAceRevision,
569 IN DWORD AccessMask,
570 IN PSID pSid);
572 BOOL WINAPI AddAccessAllowedAceEx(
573 IN OUT PACL pAcl,
574 IN DWORD dwAceRevision,
575 IN DWORD AceFlags,
576 IN DWORD AccessMask,
577 IN PSID pSid);
579 DWORD WINAPI RtlGetAce(
580 PACL pAcl,
581 DWORD dwAceIndex,
582 LPVOID *pAce );
584 /* string functions */
586 DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING*);
587 NTSTATUS WINAPI RtlAnsiStringToUnicodeString(UNICODE_STRING*,const STRING *,BOOLEAN);
588 NTSTATUS WINAPI RtlAppendAsciizToString(STRING*,LPCSTR);
589 NTSTATUS WINAPI RtlAppendStringToString(STRING*,const STRING*);
590 NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING*,const UNICODE_STRING*);
591 NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING*,LPCWSTR);
592 LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
593 LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
594 void WINAPI RtlCopyString(STRING*,const STRING*);
595 void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
596 BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
597 BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
598 void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
599 BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
600 BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
601 void WINAPI RtlFreeAnsiString(PSTRING);
602 void WINAPI RtlFreeOemString(PSTRING);
603 void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
604 void WINAPI RtlInitAnsiString(PSTRING,LPCSTR);
605 void WINAPI RtlInitString(PSTRING,LPCSTR);
606 void WINAPI RtlInitUnicodeString(PUNICODE_STRING,LPCWSTR);
607 NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
608 NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
609 UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
610 NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
611 NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
612 BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
613 BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
614 DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
615 NTSTATUS WINAPI RtlUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
616 DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
617 NTSTATUS WINAPI RtlUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
618 NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
619 NTSTATUS WINAPI RtlUnicodeToMultiByteSize(DWORD*,LPCWSTR,UINT);
620 NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
621 NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
622 NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
623 NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
624 NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
625 NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
627 DWORD WINAPI RtlIsTextUnicode(
628 LPVOID buf,
629 DWORD len,
630 DWORD *pf);
632 INT __cdecl wcstol(LPCWSTR,LPWSTR*,INT);
634 /* resource functions */
636 typedef struct _RTL_RWLOCK {
637 CRITICAL_SECTION rtlCS;
638 HANDLE hSharedReleaseSemaphore;
639 UINT uSharedWaiters;
640 HANDLE hExclusiveReleaseSemaphore;
641 UINT uExclusiveWaiters;
642 INT iNumberActive;
643 HANDLE hOwningThreadId;
644 DWORD dwTimeoutBoost;
645 PVOID pDebugInfo;
646 } RTL_RWLOCK, *LPRTL_RWLOCK;
648 VOID WINAPI RtlInitializeResource(
649 LPRTL_RWLOCK);
651 VOID WINAPI RtlDeleteResource(
652 LPRTL_RWLOCK);
654 BYTE WINAPI RtlAcquireResourceExclusive(
655 LPRTL_RWLOCK, BYTE fWait);
657 BYTE WINAPI RtlAcquireResourceShared(
658 LPRTL_RWLOCK, BYTE fWait);
660 VOID WINAPI RtlReleaseResource(
661 LPRTL_RWLOCK);
663 VOID WINAPI RtlDumpResource(
664 LPRTL_RWLOCK);
666 /* time functions */
668 typedef struct _TIME_FIELDS
669 { CSHORT Year;
670 CSHORT Month;
671 CSHORT Day;
672 CSHORT Hour;
673 CSHORT Minute;
674 CSHORT Second;
675 CSHORT Milliseconds;
676 CSHORT Weekday;
677 } TIME_FIELDS;
679 typedef TIME_FIELDS *PTIME_FIELDS;
681 VOID WINAPI RtlSystemTimeToLocalTime(
682 IN PLARGE_INTEGER SystemTime,
683 OUT PLARGE_INTEGER LocalTime);
685 VOID WINAPI RtlTimeToTimeFields(
686 PLARGE_INTEGER liTime,
687 PTIME_FIELDS TimeFields);
689 BOOLEAN WINAPI RtlTimeFieldsToTime(
690 PTIME_FIELDS tfTimeFields,
691 PLARGE_INTEGER Time);
693 VOID WINAPI RtlTimeToElapsedTimeFields(
694 PLARGE_INTEGER liTime,
695 PTIME_FIELDS TimeFields);
697 void WINAPI NtQuerySystemTime( LARGE_INTEGER *time );
699 BOOLEAN WINAPI RtlTimeToSecondsSince1980( const FILETIME *time, LPDWORD res );
700 BOOLEAN WINAPI RtlTimeToSecondsSince1970( const FILETIME *time, LPDWORD res );
701 void WINAPI RtlSecondsSince1970ToTime( DWORD time, FILETIME *res );
702 void WINAPI RtlSecondsSince1980ToTime( DWORD time, FILETIME *res );
704 /* heap functions */
706 /* Data structure for heap definition. This includes various
707 sizing parameters and callback routines, which, if left NULL,
708 result in default behavior */
710 typedef struct
711 { ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
712 ULONG Unknown[11];
713 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
715 HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
716 HANDLE WINAPI RtlDestroyHeap(HANDLE);
717 PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
718 BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
719 PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
720 ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
721 BOOLEAN WINAPI RtlLockHeap(HANDLE);
722 BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
723 ULONG WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
724 BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,PCVOID);
725 ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
726 NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
728 /* exception */
730 void WINAPI NtRaiseException(
731 PEXCEPTION_RECORD,PCONTEXT,BOOL);
733 void WINAPI RtlRaiseException(
734 PEXCEPTION_RECORD);
736 void WINAPI RtlRaiseStatus(
737 NTSTATUS);
739 void WINAPI RtlUnwind(
740 PEXCEPTION_FRAME,
741 LPVOID,
742 PEXCEPTION_RECORD,DWORD);
744 /* process environment block */
745 VOID WINAPI RtlAcquirePebLock(void);
746 VOID WINAPI RtlReleasePebLock(void);
748 /* mathematics */
749 LONGLONG WINAPI RtlConvertLongToLargeInteger( LONG a );
750 LONGLONG WINAPI RtlEnlargedIntegerMultiply( INT a, INT b );
751 LONGLONG WINAPI RtlExtendedMagicDivide( LONGLONG a, LONGLONG b, INT shift );
752 LONGLONG WINAPI RtlExtendedIntegerMultiply( LONGLONG a, INT b );
753 LONGLONG WINAPI RtlExtendedLargeIntegerDivide( LONGLONG a, INT b, INT *rem );
754 LONGLONG WINAPI RtlLargeIntegerAdd( LONGLONG a, LONGLONG b );
755 LONGLONG WINAPI RtlLargeIntegerArithmeticShift( LONGLONG a, INT count );
756 LONGLONG WINAPI RtlLargeIntegerNegate( LONGLONG a );
757 LONGLONG WINAPI RtlLargeIntegerShiftLeft( LONGLONG a, INT count );
758 LONGLONG WINAPI RtlLargeIntegerShiftRight( LONGLONG a, INT count );
759 LONGLONG WINAPI RtlLargeIntegerSubtract( LONGLONG a, LONGLONG b );
760 ULONGLONG WINAPI RtlEnlargedUnsignedMultiply( UINT a, UINT b );
761 UINT WINAPI RtlEnlargedUnsignedDivide( ULONGLONG a, UINT b, UINT *remptr );
762 ULONGLONG WINAPI RtlConvertUlongToLargeInteger( ULONG a );
763 ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG a, ULONGLONG b, ULONGLONG *rem );
765 /* environment */
766 DWORD WINAPI RtlCreateEnvironment(
767 DWORD x1,
768 DWORD x2);
770 DWORD WINAPI RtlDestroyEnvironment(
771 DWORD x);
773 DWORD WINAPI RtlQueryEnvironmentVariable_U(
774 DWORD x1,
775 PUNICODE_STRING key,
776 PUNICODE_STRING val) ;
778 DWORD WINAPI RtlSetEnvironmentVariable(
779 DWORD x1,
780 PUNICODE_STRING key,
781 PUNICODE_STRING val);
783 /* object security */
785 DWORD WINAPI RtlNewSecurityObject(
786 DWORD x1,
787 DWORD x2,
788 DWORD x3,
789 DWORD x4,
790 DWORD x5,
791 DWORD x6);
793 DWORD WINAPI RtlDeleteSecurityObject(
794 DWORD x1);
796 NTSTATUS WINAPI
797 NtQuerySecurityObject(
798 IN HANDLE Object,
799 IN SECURITY_INFORMATION RequestedInformation,
800 OUT PSECURITY_DESCRIPTOR pSecurityDesriptor,
801 IN ULONG Length,
802 OUT PULONG ResultLength);
804 NTSTATUS WINAPI
805 NtSetSecurityObject(
806 IN HANDLE Handle,
807 IN SECURITY_INFORMATION SecurityInformation,
808 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
810 /* registry functions */
812 NTSTATUS WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,
813 const UNICODE_STRING*,ULONG,PULONG);
814 NTSTATUS WINAPI NtDeleteKey(HANDLE);
815 NTSTATUS WINAPI NtDeleteValueKey(HANDLE,const UNICODE_STRING*);
816 NTSTATUS WINAPI NtOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
817 NTSTATUS WINAPI NtQueryKey(HANDLE,KEY_INFORMATION_CLASS,void*,DWORD,DWORD*);
818 NTSTATUS WINAPI NtSetValueKey(HANDLE,const UNICODE_STRING*,ULONG,ULONG,const void*,ULONG);
819 NTSTATUS WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void*,DWORD,DWORD*);
820 NTSTATUS WINAPI NtQueryValueKey(HANDLE,const UNICODE_STRING*,KEY_VALUE_INFORMATION_CLASS,
821 void*,DWORD,DWORD*);
822 NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES*,const OBJECT_ATTRIBUTES*);
825 NTSTATUS WINAPI NtEnumerateValueKey(
826 HANDLE KeyHandle,
827 ULONG Index,
828 KEY_VALUE_INFORMATION_CLASS KeyInformationClass,
829 PVOID KeyInformation,
830 ULONG Length,
831 PULONG ResultLength);
833 NTSTATUS WINAPI NtFlushKey(HANDLE KeyHandle);
835 NTSTATUS WINAPI NtNotifyChangeKey(
836 IN HANDLE KeyHandle,
837 IN HANDLE Event,
838 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
839 IN PVOID ApcContext OPTIONAL,
840 OUT PIO_STATUS_BLOCK IoStatusBlock,
841 IN ULONG CompletionFilter,
842 IN BOOLEAN Asynchroneous,
843 OUT PVOID ChangeBuffer,
844 IN ULONG Length,
845 IN BOOLEAN WatchSubtree);
847 NTSTATUS WINAPI NtQueryMultipleValueKey(
848 HANDLE KeyHandle,
849 PVALENTW ListOfValuesToQuery,
850 ULONG NumberOfItems,
851 PVOID MultipleValueInformation,
852 ULONG Length,
853 PULONG ReturnLength);
855 NTSTATUS WINAPI NtReplaceKey(
856 IN POBJECT_ATTRIBUTES ObjectAttributes,
857 IN HANDLE Key,
858 IN POBJECT_ATTRIBUTES ReplacedObjectAttributes);
860 NTSTATUS WINAPI NtRestoreKey(
861 HANDLE KeyHandle,
862 HANDLE FileHandle,
863 ULONG RestoreFlags);
865 NTSTATUS WINAPI NtSaveKey(
866 IN HANDLE KeyHandle,
867 IN HANDLE FileHandle);
869 NTSTATUS WINAPI NtSetInformationKey(
870 IN HANDLE KeyHandle,
871 IN const int KeyInformationClass,
872 IN PVOID KeyInformation,
873 IN ULONG KeyInformationLength);
875 NTSTATUS WINAPI NtUnloadKey(
876 IN HANDLE KeyHandle);
878 NTSTATUS WINAPI NtClose(
879 HANDLE Handle);
881 NTSTATUS WINAPI NtTerminateProcess( HANDLE handle, LONG exit_code );
882 NTSTATUS WINAPI NtTerminateThread( HANDLE handle, LONG exit_code );
884 NTSTATUS WINAPI NtClearEvent(HANDLE);
885 NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
886 NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
887 NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *attr);
888 NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
889 NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
890 NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
891 NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
893 NTSTATUS WINAPI RtlInitializeCriticalSection( RTL_CRITICAL_SECTION *crit );
894 NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount( RTL_CRITICAL_SECTION *crit, DWORD spincount );
895 NTSTATUS WINAPI RtlDeleteCriticalSection( RTL_CRITICAL_SECTION *crit );
896 NTSTATUS WINAPI RtlpWaitForCriticalSection( RTL_CRITICAL_SECTION *crit );
897 NTSTATUS WINAPI RtlpUnWaitCriticalSection( RTL_CRITICAL_SECTION *crit );
898 NTSTATUS WINAPI RtlEnterCriticalSection( RTL_CRITICAL_SECTION *crit );
899 BOOL WINAPI RtlTryEnterCriticalSection( RTL_CRITICAL_SECTION *crit );
900 NTSTATUS WINAPI RtlLeaveCriticalSection( RTL_CRITICAL_SECTION *crit );
902 /* string functions */
903 extern LPSTR _strlwr( LPSTR str );
904 extern LPSTR _strupr( LPSTR str );
906 /* misc */
908 #if defined(__i386__) && defined(__GNUC__)
909 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
910 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
911 #else /* __i386__ && __GNUC__ */
912 void WINAPI DbgBreakPoint(void);
913 void WINAPI DbgUserBreakPoint(void);
914 #endif /* __i386__ && __GNUC__ */
915 void WINAPIV DbgPrint(LPCSTR fmt, ...);
917 DWORD WINAPI RtlAdjustPrivilege(DWORD x1,DWORD x2,DWORD x3,DWORD x4);
918 DWORD WINAPI RtlIntegerToChar(DWORD x1,DWORD x2,DWORD x3,DWORD x4);
919 LPVOID WINAPI RtlNormalizeProcessParams(LPVOID x);
920 DWORD WINAPI RtlNtStatusToDosError(DWORD error);
921 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD type);
922 PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE hModule);
924 DWORD WINAPI RtlOpenCurrentUser(
925 IN ACCESS_MASK DesiredAccess,
926 OUT PHANDLE KeyHandle);
928 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U( LPWSTR from,PUNICODE_STRING us,DWORD x2,DWORD x3);
929 BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
931 NTSTATUS WINAPI
932 NtAccessCheck(
933 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
934 IN HANDLE ClientToken,
935 IN ACCESS_MASK DesiredAccess,
936 IN PGENERIC_MAPPING GenericMapping,
937 OUT PPRIVILEGE_SET PrivilegeSet,
938 OUT PULONG ReturnLength,
939 OUT PULONG GrantedAccess,
940 OUT PBOOLEAN AccessStatus);
942 #ifdef __cplusplus
944 #endif
946 #endif