GetShortPathName: always erase characters at the end of the new
[wine/multimedia.git] / include / ntddk.h
blob9c573d6549a83456d388bbc231025de26083bfbd
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 #include "pshpack1.h"
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
20 /******************
21 * asynchronous I/O
23 #undef Status /* conflict with X11-includes*/
25 typedef struct _IO_STATUS_BLOCK
27 union {
28 NTSTATUS Status;
29 PVOID Pointer;
30 } DUMMYUNIONNAME;
31 ULONG_PTR Information;
32 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
34 typedef VOID (NTAPI *PIO_APC_ROUTINE) ( PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved );
37 registry
40 /* key information */
41 typedef struct _KEY_BASIC_INFORMATION {
42 FILETIME LastWriteTime;
43 ULONG TitleIndex;
44 ULONG NameLength;
45 WCHAR Name[1];
46 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
48 typedef struct _KEY_NODE_INFORMATION
50 FILETIME LastWriteTime;
51 ULONG TitleIndex;
52 ULONG ClassOffset;
53 ULONG ClassLength;
54 ULONG NameLength;
55 WCHAR Name[1];
56 /* Class[1]; */
57 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
59 typedef struct _KEY_FULL_INFORMATION
61 FILETIME LastWriteTime;
62 ULONG TitleIndex;
63 ULONG ClassOffset;
64 ULONG ClassLength;
65 ULONG SubKeys;
66 ULONG MaxNameLen;
67 ULONG MaxClassLen;
68 ULONG Values;
69 ULONG MaxValueNameLen;
70 ULONG MaxValueDataLen;
71 WCHAR Class[1];
72 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
74 typedef enum _KEY_INFORMATION_CLASS
76 KeyBasicInformation,
77 KeyNodeInformation,
78 KeyFullInformation
79 } KEY_INFORMATION_CLASS;
81 typedef struct _KEY_VALUE_ENTRY
83 PUNICODE_STRING ValueName;
84 ULONG DataLength;
85 ULONG DataOffset;
86 ULONG Type;
87 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
89 /* value information */
90 typedef struct _KEY_VALUE_BASIC_INFORMATION
92 ULONG TitleIndex;
93 ULONG Type;
94 ULONG NameLength;
95 WCHAR Name[1];
96 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
98 typedef struct _KEY_VALUE_FULL_INFORMATION
100 ULONG TitleIndex;
101 ULONG Type;
102 ULONG DataOffset;
103 ULONG DataLength;
104 ULONG NameLength;
105 WCHAR Name[1];
106 /* UCHAR Data[1];*/
107 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
109 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
111 ULONG TitleIndex;
112 ULONG Type;
113 ULONG DataLength;
114 UCHAR Data[1];
115 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
117 typedef enum _KEY_VALUE_INFORMATION_CLASS
119 KeyValueBasicInformation,
120 KeyValueFullInformation,
121 KeyValuePartialInformation,
122 KeyValueFullInformationAlign64,
123 KeyValuePartialInformationAlign64
124 } KEY_VALUE_INFORMATION_CLASS;
126 NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(
127 PUNICODE_STRING KeyPath);
129 /* thread information */
131 typedef enum _THREADINFOCLASS
132 { ThreadBasicInformation,
133 ThreadTimes,
134 ThreadPriority,
135 ThreadBasePriority,
136 ThreadAffinityMask,
137 ThreadImpersonationToken,
138 ThreadDescriptorTableEntry,
139 ThreadEnableAlignmentFaultFixup,
140 ThreadEventPair_Reusable,
141 ThreadQuerySetWin32StartAddress,
142 ThreadZeroTlsCell,
143 ThreadPerformanceCount,
144 ThreadAmILastThread,
145 ThreadIdealProcessor,
146 ThreadPriorityBoost,
147 ThreadSetTlsArrayAddress,
148 ThreadIsIoPending,
149 MaxThreadInfoClass
150 } THREADINFOCLASS;
152 /* file information */
154 typedef enum _FILE_INFORMATION_CLASS {
155 FileDirectoryInformation = 1,
156 FileFullDirectoryInformation,
157 FileBothDirectoryInformation,
158 FileBasicInformation,
159 FileStandardInformation,
160 FileInternalInformation,
161 FileEaInformation,
162 FileAccessInformation,
163 FileNameInformation,
164 FileRenameInformation,
165 FileLinkInformation,
166 FileNamesInformation,
167 FileDispositionInformation,
168 FilePositionInformation,
169 FileFullEaInformation,
170 FileModeInformation,
171 FileAlignmentInformation,
172 FileAllInformation,
173 FileAllocationInformation,
174 FileEndOfFileInformation,
175 FileAlternateNameInformation,
176 FileStreamInformation,
177 FilePipeInformation,
178 FilePipeLocalInformation,
179 FilePipeRemoteInformation,
180 FileMailslotQueryInformation,
181 FileMailslotSetInformation,
182 FileCompressionInformation,
183 FileObjectIdInformation,
184 FileCompletionInformation,
185 FileMoveClusterInformation,
186 FileQuotaInformation,
187 FileReparsePointInformation,
188 FileNetworkOpenInformation,
189 FileAttributeTagInformation,
190 FileTrackingInformation,
191 FileMaximumInformation
192 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
194 typedef enum _FSINFOCLASS {
195 FileFsVolumeInformation = 1,
196 FileFsLabelInformation,
197 FileFsSizeInformation,
198 FileFsDeviceInformation,
199 FileFsAttributeInformation,
200 FileFsControlInformation,
201 FileFsFullSizeInformation,
202 FileFsObjectIdInformation,
203 FileFsMaximumInformation
204 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
206 typedef enum _SECTION_INHERIT
208 ViewShare = 1,
209 ViewUnmap = 2
211 } SECTION_INHERIT;
213 /* object information */
215 typedef enum _OBJECT_INFORMATION_CLASS
217 DunnoTheConstants1
219 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
222 /* system information */
224 typedef enum SYSTEM_INFORMATION_CLASS
225 { Unknown1 = 1,
226 Unknown2,
227 Unknown3,
228 Unknown4,
229 SystemPerformanceInformation
230 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
232 /* reading coffee grounds... */
233 typedef struct _THREAD_INFO
234 { DWORD Unknown1[6];
235 DWORD ThreadID;
236 DWORD Unknown2[3];
237 DWORD Status;
238 DWORD WaitReason;
239 DWORD Unknown3[4];
240 } THREAD_INFO, PTHREAD_INFO;
242 typedef struct _VM_COUNTERS_
243 { ULONG PeakVirtualSize;
244 ULONG VirtualSize;
245 ULONG PageFaultCount;
246 ULONG PeakWorkingSetSize;
247 ULONG WorkingSetSize;
248 ULONG QuotaPeakPagedPoolUsage;
249 ULONG QuotaPagedPoolUsage;
250 ULONG QuotaPeakNonPagedPoolUsage;
251 ULONG QuotaNonPagedPoolUsage;
252 ULONG PagefileUsage;
253 ULONG PeakPagefileUsage;
254 } VM_COUNTERS, *PVM_COUNTERS;
256 /* process information */
258 typedef struct _PROCESS_INFO
259 { DWORD Offset; /* 00 offset to next PROCESS_INFO ok*/
260 DWORD ThreadCount; /* 04 number of ThreadInfo member ok */
261 DWORD Unknown1[6];
262 FILETIME CreationTime; /* 20 */
263 DWORD Unknown2[5];
264 PWCHAR ProcessName; /* 3c ok */
265 DWORD BasePriority;
266 DWORD ProcessID; /* 44 ok*/
267 DWORD ParentProcessID;
268 DWORD HandleCount;
269 DWORD Unknown3[2]; /* 50 */
270 ULONG PeakVirtualSize;
271 ULONG VirtualSize;
272 ULONG PageFaultCount;
273 ULONG PeakWorkingSetSize;
274 ULONG WorkingSetSize;
275 ULONG QuotaPeakPagedPoolUsage;
276 ULONG QuotaPagedPoolUsage;
277 ULONG QuotaPeakNonPagedPoolUsage;
278 ULONG QuotaNonPagedPoolUsage;
279 ULONG PagefileUsage;
280 ULONG PeakPagefileUsage;
281 DWORD PrivateBytes;
282 DWORD Unknown6[4];
283 THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
284 } PROCESS_INFO, PPROCESS_INFO;
286 NTSTATUS WINAPI NtQuerySystemInformation(
287 IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
288 OUT PVOID SystemInformation,
289 IN ULONG Length,
290 OUT PULONG ResultLength);
293 * system configuration
297 typedef struct _SYSTEM_TIME_ADJUSTMENT
299 ULONG TimeAdjustment;
300 BOOLEAN TimeAdjustmentDisabled;
302 } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
304 typedef struct _SYSTEM_CONFIGURATION_INFO
306 union
307 { ULONG OemId;
308 struct
309 { WORD ProcessorArchitecture;
310 WORD Reserved;
311 } tag1;
312 } tag2;
313 ULONG PageSize;
314 PVOID MinimumApplicationAddress;
315 PVOID MaximumApplicationAddress;
316 ULONG ActiveProcessorMask;
317 ULONG NumberOfProcessors;
318 ULONG ProcessorType;
319 ULONG AllocationGranularity;
320 WORD ProcessorLevel;
321 WORD ProcessorRevision;
323 } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
326 typedef struct _SYSTEM_CACHE_INFORMATION
328 ULONG CurrentSize;
329 ULONG PeakSize;
330 ULONG PageFaultCount;
331 ULONG MinimumWorkingSet;
332 ULONG MaximumWorkingSet;
333 ULONG Unused[4];
335 } SYSTEM_CACHE_INFORMATION;
338 * NtQueryProcessInformation
341 /* parameter ProcessInformationClass */
343 typedef enum _PROCESSINFOCLASS
344 { ProcessBasicInformation,
345 ProcessQuotaLimits,
346 ProcessIoCounters,
347 ProcessVmCounters,
348 ProcessTimes,
349 ProcessBasePriority,
350 ProcessRaisePriority,
351 ProcessDebugPort,
352 ProcessExceptionPort,
353 ProcessAccessToken,
354 ProcessLdtInformation,
355 ProcessLdtSize,
356 ProcessDefaultHardErrorMode,
357 ProcessIoPortHandlers,
358 ProcessPooledUsageAndLimits,
359 ProcessWorkingSetWatch,
360 ProcessUserModeIOPL,
361 ProcessEnableAlignmentFaultFixup,
362 ProcessPriorityClass,
363 ProcessWx86Information,
364 ProcessHandleCount,
365 ProcessAffinityMask,
366 ProcessPriorityBoost,
367 ProcessDeviceMap,
368 ProcessSessionInformation,
369 ProcessForegroundInformation,
370 ProcessWow64Information,
371 MaxProcessInfoClass
372 } PROCESSINFOCLASS;
374 /* parameter ProcessInformation (depending on ProcessInformationClass) */
376 typedef struct _PROCESS_BASIC_INFORMATION
377 { DWORD ExitStatus;
378 DWORD PebBaseAddress;
379 DWORD AffinityMask;
380 DWORD BasePriority;
381 ULONG UniqueProcessId;
382 ULONG InheritedFromUniqueProcessId;
383 } PROCESS_BASIC_INFORMATION;
385 NTSTATUS WINAPI NtQueryInformationProcess(
386 IN HANDLE ProcessHandle,
387 IN PROCESSINFOCLASS ProcessInformationClass,
388 OUT PVOID ProcessInformation,
389 IN ULONG ProcessInformationLength,
390 OUT PULONG ReturnLength);
392 #define NtCurrentProcess() ( (HANDLE) -1 )
395 * timer
398 typedef enum _TIMER_TYPE
400 NotificationTimer,
401 SynchronizationTimer
403 } TIMER_TYPE;
405 /* token functions */
407 NTSTATUS WINAPI NtOpenProcessToken(
408 HANDLE ProcessHandle,
409 DWORD DesiredAccess,
410 HANDLE *TokenHandle);
412 NTSTATUS WINAPI NtOpenThreadToken(
413 HANDLE ThreadHandle,
414 DWORD DesiredAccess,
415 BOOLEAN OpenAsSelf,
416 HANDLE *TokenHandle);
418 NTSTATUS WINAPI NtAdjustPrivilegesToken(
419 IN HANDLE TokenHandle,
420 IN BOOLEAN DisableAllPrivileges,
421 IN PTOKEN_PRIVILEGES NewState,
422 IN DWORD BufferLength,
423 OUT PTOKEN_PRIVILEGES PreviousState,
424 OUT PDWORD ReturnLength);
426 NTSTATUS WINAPI NtQueryInformationToken(
427 HANDLE token,
428 DWORD tokeninfoclass,
429 LPVOID tokeninfo,
430 DWORD tokeninfolength,
431 LPDWORD retlen );
433 /* sid functions */
435 BOOLEAN WINAPI RtlAllocateAndInitializeSid (
436 PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
437 BYTE nSubAuthorityCount,
438 DWORD nSubAuthority0, DWORD nSubAuthority1,
439 DWORD nSubAuthority2, DWORD nSubAuthority3,
440 DWORD nSubAuthority4, DWORD nSubAuthority5,
441 DWORD nSubAuthority6, DWORD nSubAuthority7,
442 PSID *pSid );
444 BOOL WINAPI RtlInitializeSid(
445 PSID pSid,
446 PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
447 BYTE nSubAuthorityCount);
449 DWORD WINAPI RtlFreeSid(
450 PSID pSid);
452 BOOL WINAPI RtlEqualSid(
453 PSID pSid1,
454 PSID pSid2 );
456 DWORD WINAPI RtlLengthRequiredSid(
457 DWORD nrofsubauths);
459 DWORD WINAPI RtlLengthSid(
460 PSID sid);
462 LPDWORD WINAPI RtlSubAuthoritySid(
463 PSID PSID,
464 DWORD nr);
466 LPBYTE WINAPI RtlSubAuthorityCountSid(
467 PSID pSid);
469 DWORD WINAPI RtlCopySid(
470 DWORD len,
471 PSID to,
472 PSID from);
474 BOOL WINAPI RtlValidSid(
475 PSID pSid);
477 BOOL WINAPI RtlEqualPrefixSid(
478 PSID pSid1,
479 PSID pSid2);
481 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(
482 PSID pSid );
484 /* security descriptor functions */
486 NTSTATUS WINAPI RtlCreateSecurityDescriptor(
487 PSECURITY_DESCRIPTOR lpsd,
488 DWORD rev);
490 NTSTATUS WINAPI RtlValidSecurityDescriptor(
491 PSECURITY_DESCRIPTOR SecurityDescriptor);
493 ULONG WINAPI RtlLengthSecurityDescriptor(
494 PSECURITY_DESCRIPTOR SecurityDescriptor);
496 NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(
497 IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
498 OUT PBOOLEAN lpbDaclPresent,
499 OUT PACL *pDacl,
500 OUT PBOOLEAN lpbDaclDefaulted);
502 NTSTATUS WINAPI RtlSetDaclSecurityDescriptor (
503 PSECURITY_DESCRIPTOR lpsd,
504 BOOLEAN daclpresent,
505 PACL dacl,
506 BOOLEAN dacldefaulted );
508 NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(
509 IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
510 OUT PBOOLEAN lpbSaclPresent,
511 OUT PACL *pSacl,
512 OUT PBOOLEAN lpbSaclDefaulted);
514 NTSTATUS WINAPI RtlSetSaclSecurityDescriptor (
515 PSECURITY_DESCRIPTOR lpsd,
516 BOOLEAN saclpresent,
517 PACL sacl,
518 BOOLEAN sacldefaulted);
520 NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(
521 PSECURITY_DESCRIPTOR SecurityDescriptor,
522 PSID *Owner,
523 PBOOLEAN OwnerDefaulted);
525 NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(
526 PSECURITY_DESCRIPTOR lpsd,
527 PSID owner,
528 BOOLEAN ownerdefaulted);
530 NTSTATUS WINAPI RtlSetGroupSecurityDescriptor (
531 PSECURITY_DESCRIPTOR lpsd,
532 PSID group,
533 BOOLEAN groupdefaulted);
535 NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(
536 PSECURITY_DESCRIPTOR SecurityDescriptor,
537 PSID *Group,
538 PBOOLEAN GroupDefaulted);
540 NTSTATUS WINAPI RtlMakeSelfRelativeSD(
541 IN PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
542 IN PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
543 IN OUT LPDWORD lpdwBufferLength);
545 NTSTATUS WINAPI RtlGetControlSecurityDescriptor(
546 PSECURITY_DESCRIPTOR pSecurityDescriptor,
547 PSECURITY_DESCRIPTOR_CONTROL pControl,
548 LPDWORD lpdwRevision);
550 /* acl functions */
552 NTSTATUS WINAPI RtlCreateAcl(
553 PACL acl,
554 DWORD size,
555 DWORD rev);
557 BOOLEAN WINAPI RtlFirstFreeAce(
558 PACL acl,
559 PACE_HEADER *x);
561 NTSTATUS WINAPI RtlAddAce(
562 PACL acl,
563 DWORD rev,
564 DWORD xnrofaces,
565 PACE_HEADER acestart,
566 DWORD acelen);
568 BOOL WINAPI RtlAddAccessAllowedAce(
569 IN OUT PACL pAcl,
570 IN DWORD dwAceRevision,
571 IN DWORD AccessMask,
572 IN PSID pSid);
574 BOOL WINAPI AddAccessAllowedAceEx(
575 IN OUT PACL pAcl,
576 IN DWORD dwAceRevision,
577 IN DWORD AceFlags,
578 IN DWORD AccessMask,
579 IN PSID pSid);
581 DWORD WINAPI RtlGetAce(
582 PACL pAcl,
583 DWORD dwAceIndex,
584 LPVOID *pAce );
586 /* string functions */
588 VOID WINAPI RtlInitAnsiString(
589 PANSI_STRING target,
590 LPCSTR source);
592 VOID WINAPI RtlInitString(
593 PSTRING target,
594 LPCSTR source);
596 VOID WINAPI RtlInitUnicodeString(
597 PUNICODE_STRING target,
598 LPCWSTR source);
600 VOID WINAPI RtlFreeUnicodeString(
601 PUNICODE_STRING str);
603 VOID WINAPI RtlFreeAnsiString(
604 PANSI_STRING AnsiString);
606 NTSTATUS WINAPI RtlAnsiStringToUnicodeString(
607 PUNICODE_STRING uni,
608 PANSI_STRING ansi,
609 BOOLEAN doalloc);
611 NTSTATUS WINAPI RtlOemStringToUnicodeString(
612 PUNICODE_STRING uni,
613 PSTRING ansi,
614 BOOLEAN doalloc);
616 NTSTATUS WINAPI RtlMultiByteToUnicodeN(
617 LPWSTR unistr,
618 DWORD unilen,
619 LPDWORD reslen,
620 LPSTR oemstr,
621 DWORD oemlen);
623 NTSTATUS WINAPI RtlOemToUnicodeN(
624 LPWSTR unistr,
625 DWORD unilen,
626 LPDWORD reslen,
627 LPSTR oemstr,
628 DWORD oemlen);
630 NTSTATUS WINAPI RtlUnicodeToOemN(
631 LPSTR oemstr,
632 DWORD oemlen,
633 LPDWORD reslen,
634 LPWSTR unistr,
635 DWORD unilen);
637 NTSTATUS WINAPI RtlUnicodeStringToOemString(
638 PANSI_STRING oem,
639 PUNICODE_STRING uni,
640 BOOLEAN alloc);
642 NTSTATUS WINAPI RtlUnicodeStringToAnsiString(
643 PANSI_STRING oem,
644 PUNICODE_STRING uni,
645 BOOLEAN alloc);
647 BOOLEAN WINAPI RtlEqualUnicodeString(
648 PUNICODE_STRING s1,
649 PUNICODE_STRING s2,
650 BOOLEAN x);
652 DWORD WINAPI RtlUpcaseUnicodeString(
653 PUNICODE_STRING dest,
654 PUNICODE_STRING src,
655 BOOLEAN doalloc);
657 UINT WINAPI RtlxOemStringToUnicodeSize(
658 PSTRING str);
660 UINT WINAPI RtlxAnsiStringToUnicodeSize(
661 PANSI_STRING str);
663 DWORD WINAPI RtlIsTextUnicode(
664 LPVOID buf,
665 DWORD len,
666 DWORD *pf);
668 NTSTATUS WINAPI RtlCompareUnicodeString(
669 PUNICODE_STRING String1,
670 PUNICODE_STRING String2,
671 BOOLEAN CaseInSensitive);
673 /* resource functions */
675 typedef struct _RTL_RWLOCK {
676 CRITICAL_SECTION rtlCS;
677 HANDLE hSharedReleaseSemaphore;
678 UINT uSharedWaiters;
679 HANDLE hExclusiveReleaseSemaphore;
680 UINT uExclusiveWaiters;
681 INT iNumberActive;
682 HANDLE hOwningThreadId;
683 DWORD dwTimeoutBoost;
684 PVOID pDebugInfo;
685 } RTL_RWLOCK, *LPRTL_RWLOCK;
687 VOID WINAPI RtlInitializeResource(
688 LPRTL_RWLOCK);
690 VOID WINAPI RtlDeleteResource(
691 LPRTL_RWLOCK);
693 BYTE WINAPI RtlAcquireResourceExclusive(
694 LPRTL_RWLOCK, BYTE fWait);
696 BYTE WINAPI RtlAcquireResourceShared(
697 LPRTL_RWLOCK, BYTE fWait);
699 VOID WINAPI RtlReleaseResource(
700 LPRTL_RWLOCK);
702 VOID WINAPI RtlDumpResource(
703 LPRTL_RWLOCK);
705 /* time functions */
707 typedef struct _TIME_FIELDS
708 { CSHORT Year;
709 CSHORT Month;
710 CSHORT Day;
711 CSHORT Hour;
712 CSHORT Minute;
713 CSHORT Second;
714 CSHORT Milliseconds;
715 CSHORT Weekday;
716 } TIME_FIELDS;
718 typedef TIME_FIELDS *PTIME_FIELDS;
720 VOID WINAPI RtlSystemTimeToLocalTime(
721 IN PLARGE_INTEGER SystemTime,
722 OUT PLARGE_INTEGER LocalTime);
724 VOID WINAPI RtlTimeToTimeFields(
725 PLARGE_INTEGER liTime,
726 PTIME_FIELDS TimeFields);
728 BOOLEAN WINAPI RtlTimeFieldsToTime(
729 PTIME_FIELDS tfTimeFields,
730 PLARGE_INTEGER Time);
732 VOID WINAPI RtlTimeToElapsedTimeFields(
733 PLARGE_INTEGER liTime,
734 PTIME_FIELDS TimeFields);
736 BOOLEAN WINAPI RtlTimeToSecondsSince1980(
737 LPFILETIME ft,
738 LPDWORD timeret);
740 BOOLEAN WINAPI RtlTimeToSecondsSince1970(
741 LPFILETIME ft,
742 LPDWORD timeret);
744 /* heap functions */
746 /* Data structure for heap definition. This includes various
747 sizing parameters and callback routines, which, if left NULL,
748 result in default behavior */
750 typedef struct
751 { ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
752 ULONG Unknown[11];
753 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
755 HANDLE WINAPI RtlCreateHeap(
756 ULONG Flags,
757 PVOID BaseAddress,
758 ULONG SizeToReserve,
759 ULONG SizeToCommit,
760 PVOID Unknown,
761 PRTL_HEAP_DEFINITION Definition);
763 PVOID WINAPI RtlAllocateHeap(
764 HANDLE Heap,
765 ULONG Flags,
766 ULONG Size);
769 BOOLEAN WINAPI RtlFreeHeap(
770 HANDLE Heap,
771 ULONG Flags,
772 PVOID Address);
774 /* exception */
776 void WINAPI NtRaiseException(
777 PEXCEPTION_RECORD,PCONTEXT,BOOL);
779 void WINAPI RtlRaiseException(
780 PEXCEPTION_RECORD);
782 void WINAPI RtlRaiseStatus(
783 NTSTATUS);
785 void WINAPI RtlUnwind(
786 PEXCEPTION_FRAME,
787 LPVOID,
788 PEXCEPTION_RECORD,DWORD);
790 /* process environment block */
791 VOID WINAPI RtlAcquirePebLock(void);
792 VOID WINAPI RtlReleasePebLock(void);
794 /* mathematics */
795 INT WINAPI RtlExtendedLargeIntegerDivide(
796 LARGE_INTEGER dividend,
797 DWORD divisor,
798 LPDWORD rest);
800 LARGE_INTEGER WINAPI RtlExtendedIntegerMultiply(
801 LARGE_INTEGER factor1,
802 INT factor2);
804 /* environment */
805 DWORD WINAPI RtlCreateEnvironment(
806 DWORD x1,
807 DWORD x2);
809 DWORD WINAPI RtlDestroyEnvironment(
810 DWORD x);
812 DWORD WINAPI RtlQueryEnvironmentVariable_U(
813 DWORD x1,
814 PUNICODE_STRING key,
815 PUNICODE_STRING val) ;
817 DWORD WINAPI RtlSetEnvironmentVariable(
818 DWORD x1,
819 PUNICODE_STRING key,
820 PUNICODE_STRING val);
822 /* object security */
824 DWORD WINAPI RtlNewSecurityObject(
825 DWORD x1,
826 DWORD x2,
827 DWORD x3,
828 DWORD x4,
829 DWORD x5,
830 DWORD x6);
832 DWORD WINAPI RtlDeleteSecurityObject(
833 DWORD x1);
835 NTSTATUS WINAPI
836 NtQuerySecurityObject(
837 IN HANDLE Object,
838 IN SECURITY_INFORMATION RequestedInformation,
839 OUT PSECURITY_DESCRIPTOR pSecurityDesriptor,
840 IN ULONG Length,
841 OUT PULONG ResultLength);
843 NTSTATUS WINAPI
844 NtSetSecurityObject(
845 IN HANDLE Handle,
846 IN SECURITY_INFORMATION SecurityInformation,
847 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
849 /* registry functions */
851 NTSTATUS WINAPI NtCreateKey(
852 PHANDLE KeyHandle,
853 ACCESS_MASK DesiredAccess,
854 POBJECT_ATTRIBUTES ObjectAttributes,
855 ULONG TitleIndex,
856 PUNICODE_STRING Class,
857 ULONG CreateOptions,
858 PULONG Disposition);
860 NTSTATUS WINAPI NtOpenKey(
861 PHANDLE KeyHandle,
862 ACCESS_MASK DesiredAccess,
863 POBJECT_ATTRIBUTES ObjectAttributes);
865 NTSTATUS WINAPI NtDeleteKey(HANDLE KeyHandle);
867 NTSTATUS WINAPI NtDeleteValueKey(
868 IN HANDLE KeyHandle,
869 IN PUNICODE_STRING ValueName);
871 NTSTATUS WINAPI NtEnumerateKey(
872 HANDLE KeyHandle,
873 ULONG Index,
874 KEY_INFORMATION_CLASS KeyInformationClass,
875 PVOID KeyInformation,
876 ULONG Length,
877 PULONG ResultLength);
879 NTSTATUS WINAPI NtQueryKey(
880 HANDLE KeyHandle,
881 KEY_INFORMATION_CLASS KeyInformationClass,
882 PVOID KeyInformation,
883 ULONG Length,
884 PULONG ResultLength);
886 NTSTATUS WINAPI NtEnumerateValueKey(
887 HANDLE KeyHandle,
888 ULONG Index,
889 KEY_VALUE_INFORMATION_CLASS KeyInformationClass,
890 PVOID KeyInformation,
891 ULONG Length,
892 PULONG ResultLength);
894 NTSTATUS WINAPI NtFlushKey(HANDLE KeyHandle);
896 NTSTATUS WINAPI NtLoadKey(
897 PHANDLE KeyHandle,
898 POBJECT_ATTRIBUTES ObjectAttributes);
900 NTSTATUS WINAPI NtNotifyChangeKey(
901 IN HANDLE KeyHandle,
902 IN HANDLE Event,
903 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
904 IN PVOID ApcContext OPTIONAL,
905 OUT PIO_STATUS_BLOCK IoStatusBlock,
906 IN ULONG CompletionFilter,
907 IN BOOLEAN Asynchroneous,
908 OUT PVOID ChangeBuffer,
909 IN ULONG Length,
910 IN BOOLEAN WatchSubtree);
912 NTSTATUS WINAPI NtQueryMultipleValueKey(
913 HANDLE KeyHandle,
914 PVALENTW ListOfValuesToQuery,
915 ULONG NumberOfItems,
916 PVOID MultipleValueInformation,
917 ULONG Length,
918 PULONG ReturnLength);
920 NTSTATUS WINAPI NtQueryValueKey(
921 IN HANDLE KeyHandle,
922 IN PUNICODE_STRING ValueName,
923 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
924 OUT PVOID KeyValueInformation,
925 IN ULONG Length,
926 OUT PULONG ResultLength);
928 NTSTATUS WINAPI NtReplaceKey(
929 IN POBJECT_ATTRIBUTES ObjectAttributes,
930 IN HANDLE Key,
931 IN POBJECT_ATTRIBUTES ReplacedObjectAttributes);
933 NTSTATUS WINAPI NtRestoreKey(
934 HANDLE KeyHandle,
935 HANDLE FileHandle,
936 ULONG RestoreFlags);
938 NTSTATUS WINAPI NtSaveKey(
939 IN HANDLE KeyHandle,
940 IN HANDLE FileHandle);
942 NTSTATUS WINAPI NtSetInformationKey(
943 IN HANDLE KeyHandle,
944 IN const int KeyInformationClass,
945 IN PVOID KeyInformation,
946 IN ULONG KeyInformationLength);
948 NTSTATUS WINAPI NtSetValueKey(
949 HANDLE KeyHandle,
950 PUNICODE_STRING ValueName,
951 ULONG TitleIndex,
952 ULONG Type,
953 PVOID Data,
954 ULONG DataSize);
956 NTSTATUS WINAPI NtUnloadKey(
957 IN HANDLE KeyHandle);
959 NTSTATUS WINAPI NtClose(
960 HANDLE Handle);
962 /* misc */
964 #if defined(__i386__) && defined(__GNUC__)
965 static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
966 static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
967 #else /* __i386__ && __GNUC__ */
968 void WINAPI DbgBreakPoint(void);
969 void WINAPI DbgUserBreakPoint(void);
970 #endif /* __i386__ && __GNUC__ */
971 void WINAPIV DbgPrint(LPCSTR fmt, ...);
973 DWORD WINAPI RtlAdjustPrivilege(DWORD x1,DWORD x2,DWORD x3,DWORD x4);
974 DWORD WINAPI RtlIntegerToChar(DWORD x1,DWORD x2,DWORD x3,DWORD x4);
975 LPVOID WINAPI RtlNormalizeProcessParams(LPVOID x);
976 DWORD WINAPI RtlNtStatusToDosError(DWORD error);
977 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD type);
979 DWORD WINAPI RtlOpenCurrentUser(
980 IN ACCESS_MASK DesiredAccess,
981 OUT PHANDLE KeyHandle);
983 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U( LPWSTR from,PUNICODE_STRING us,DWORD x2,DWORD x3);
984 BOOL WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
986 NTSTATUS WINAPI
987 NtAccessCheck(
988 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
989 IN HANDLE ClientToken,
990 IN ACCESS_MASK DesiredAccess,
991 IN PGENERIC_MAPPING GenericMapping,
992 OUT PPRIVILEGE_SET PrivilegeSet,
993 OUT PULONG ReturnLength,
994 OUT PULONG GrantedAccess,
995 OUT PBOOLEAN AccessStatus);
997 #ifdef __cplusplus
999 #endif
1001 #include "poppack.h"
1003 #endif