ReactOS 0.4.16-dev-2284-g3529151
utils.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: dll/win32/kernel32/client/utils.c
5 * PURPOSE: Utility and Support Functions
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7 * Pierre Schweitzer (pierre.schweitzer@reactos.org)
8 */
9
10/* INCLUDES ******************************************************************/
11
12#include <k32.h>
13#ifdef _M_IX86
14#include "i386/ketypes.h"
15#elif defined _M_AMD64
16#include "amd64/ketypes.h"
17#endif
18
19#define NDEBUG
20#include <debug.h>
21
22/* GLOBALS ********************************************************************/
23
25BOOL bIsFileApiAnsi = TRUE; // set the file api to ansi or oem
26
31
32/* FUNCTIONS ******************************************************************/
33
37{
39}
40
44{
46}
47
51{
53}
54
58{
60}
61
65{
68 HANDLE DirHandle, BnoHandle, Token, NewToken;
69
71
72 if (NtCurrentTeb()->IsImpersonating)
73 {
76 TRUE,
77 &Token);
79
80 NewToken = NULL;
83 &NewToken,
84 sizeof(HANDLE));
85 if (!NT_SUCCESS (Status))
86 {
89 }
90 }
91 else
92 {
93 Token = NULL;
94 }
95
97 if (BaseNamedObjectDirectory) goto Quickie;
98
102 NULL,
103 NULL);
104
105 Status = NtOpenDirectoryObject(&BnoHandle,
111 if (!NT_SUCCESS(Status))
112 {
113 Status = NtOpenDirectoryObject(&DirHandle,
116
117 if (NT_SUCCESS(Status))
118 {
122 DirHandle,
123 NULL);
124
125 Status = NtOpenDirectoryObject(&BnoHandle,
131 NtClose(DirHandle);
132
133 }
134 }
135
137
138Quickie:
139
141
142 if (Token)
143 {
146 &Token,
147 sizeof(Token));
148
149 NtClose(Token);
150 }
151
153}
154
155VOID
156NTAPI
159 OUT BOOLEAN *StopEnumeration)
160{
161 /* Make sure we get Entry, Context and valid StopEnumeration pointer */
162 ASSERT(Entry);
164 ASSERT(StopEnumeration);
165
166 /* If entry is already found - signal to stop */
168 {
169 *StopEnumeration = TRUE;
170 return;
171 }
172
173 /* Otherwise keep enumerating until we find a match */
174 if (Entry->DllBase == Context)
175 {
176 /* It matches, so remember the ldr entry */
178
179 /* And stop enumeration */
180 *StopEnumeration = TRUE;
181 }
182}
183
184/*
185 * Converts an ANSI or OEM String to the TEB StaticUnicodeString
186 */
188WINAPI
190{
191 PUNICODE_STRING StaticString = &(NtCurrentTeb()->StaticUnicodeString);
194
195 /* Initialize an ANSI String */
197 if (!NT_SUCCESS(Status))
198 {
200 }
201 else
202 {
203 /* Convert it */
205 }
206
207 if (NT_SUCCESS(Status)) return StaticString;
208
210 {
212 }
213 else
214 {
216 }
217
218 return NULL;
219}
220
221/*
222 * Allocates space from the Heap and converts an Unicode String into it
223 */
225WINAPI
228{
231
232 /* Initialize an ANSI String */
234 if (!NT_SUCCESS(Status))
235 {
237 }
238 else
239 {
240 /* Convert it */
242 }
243
244 if (NT_SUCCESS(Status)) return TRUE;
245
247 {
249 }
250 else
251 {
253 }
254
255 return FALSE;
256}
257
258/*
259 * Allocates space from the Heap and converts an Ansi String into it
260 */
261 /*NOTE: API IS A HACK */
262VOID
263WINAPI
266{
267 ANSI_STRING AnsiTemp;
268 UNICODE_STRING UnicodeTemp;
269
270 DPRINT("BasepAnsiStringToHeapUnicodeString\n");
271
272 /* First create the ANSI_STRING */
273 RtlInitAnsiString(&AnsiTemp, AnsiString);
274
276 &AnsiTemp,
277 TRUE)))
278 {
279 *UnicodeString = UnicodeTemp.Buffer;
280 }
281 else
282 {
284 }
285}
286
288WINAPI
290 IN DWORD dwMilliseconds)
291{
292 /* Check if this is an infinite wait, which means no timeout argument */
293 if (dwMilliseconds == INFINITE) return NULL;
294
295 /* Otherwise, convert the time to NT Format */
296 Timeout->QuadPart = dwMilliseconds * -10000LL;
297 return Timeout;
298}
299
300/*
301 * Converts lpSecurityAttributes + Object Name into ObjectAttributes.
302 */
304WINAPI
306 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL,
308{
312 DPRINT("BaseFormatObjectAttributes. Security: %p, Name: %p\n",
313 SecurityAttributes, ObjectName);
314
315 /* Get the attributes if present */
316 if (SecurityAttributes)
317 {
318 Attributes = SecurityAttributes->bInheritHandle ? OBJ_INHERIT : 0;
319 SecurityDescriptor = SecurityAttributes->lpSecurityDescriptor;
320 }
321 else
322 {
323 if (!ObjectName) return NULL;
324 Attributes = 0;
326 }
327
328 if (ObjectName)
329 {
332 }
333 else
334 {
336 }
337
338 /* Create the Object Attributes */
344 DPRINT("Attributes: %lx, RootDirectory: %p, SecurityDescriptor: %p\n",
346 return ObjectAttributes;
347}
348
349/*
350 * Creates a stack for a thread or fiber.
351 * NOTE: Adapted from sdk/lib/rtl/thread.c:RtlpCreateUserStack().
352 */
354WINAPI
357 _In_opt_ SIZE_T StackCommit,
358 _In_opt_ SIZE_T StackReserve,
359 _Out_ PINITIAL_TEB InitialTeb)
360{
362 PIMAGE_NT_HEADERS Headers;
364 BOOLEAN UseGuard;
365 ULONG PageSize, AllocationGranularity, Dummy;
366 SIZE_T MinimumStackCommit, GuardPageSize;
367
368 DPRINT("BaseCreateStack(hProcess: 0x%p, Max: 0x%lx, Current: 0x%lx)\n",
369 hProcess, StackReserve, StackCommit);
370
371 /* Read page size */
373 AllocationGranularity = BaseStaticServerData->SysInfo.AllocationGranularity;
374
375 /* Get the Image Headers */
376 Headers = RtlImageNtHeader(NtCurrentPeb()->ImageBaseAddress);
377 if (!Headers) return STATUS_INVALID_IMAGE_FORMAT;
378
379 if (StackReserve == 0)
380 StackReserve = Headers->OptionalHeader.SizeOfStackReserve;
381
382 if (StackCommit == 0)
383 {
384 StackCommit = Headers->OptionalHeader.SizeOfStackCommit;
385 }
386 /* Check if the commit is higher than the reserve */
387 else if (StackCommit >= StackReserve)
388 {
389 /* Grow the reserve beyond the commit, up to 1MB alignment */
390 StackReserve = ROUND_UP(StackCommit, 1024 * 1024);
391 }
392
393 /* Align everything to Page Size */
394 StackCommit = ROUND_UP(StackCommit, PageSize);
395 StackReserve = ROUND_UP(StackReserve, AllocationGranularity);
396
397 MinimumStackCommit = NtCurrentPeb()->MinimumStackCommit;
398 if ((MinimumStackCommit != 0) && (StackCommit < MinimumStackCommit))
399 {
400 StackCommit = MinimumStackCommit;
401 }
402
403 /* Check if the commit is higher than the reserve */
404 if (StackCommit >= StackReserve)
405 {
406 /* Grow the reserve beyond the commit, up to 1MB alignment */
407 StackReserve = ROUND_UP(StackCommit, 1024 * 1024);
408 }
409
410 /* Align everything to Page Size */
411 StackCommit = ROUND_UP(StackCommit, PageSize);
412 StackReserve = ROUND_UP(StackReserve, AllocationGranularity);
413
414 /* Reserve memory for the stack */
415 Stack = 0;
417 (PVOID*)&Stack,
418 0,
419 &StackReserve,
422 if (!NT_SUCCESS(Status))
423 {
424 DPRINT1("Failure to reserve stack: %lx\n", Status);
425 return Status;
426 }
427
428 /* Now set up some basic Initial TEB Parameters */
429 InitialTeb->AllocatedStackBase = (PVOID)Stack;
430 InitialTeb->StackBase = (PVOID)(Stack + StackReserve);
431 InitialTeb->PreviousStackBase = NULL;
432 InitialTeb->PreviousStackLimit = NULL;
433
434 /* Update the stack position */
435 Stack += StackReserve - StackCommit;
436
437 /* Check if we can add a guard page */
438 if (StackReserve >= StackCommit + PageSize)
439 {
440 Stack -= PageSize;
441 StackCommit += PageSize;
442 UseGuard = TRUE;
443 }
444 else
445 {
446 UseGuard = FALSE;
447 }
448
449 /* Allocate memory for the stack */
451 (PVOID*)&Stack,
452 0,
453 &StackCommit,
456 if (!NT_SUCCESS(Status))
457 {
458 DPRINT1("Failure to allocate stack\n");
459 GuardPageSize = 0;
460 NtFreeVirtualMemory(hProcess, (PVOID*)&Stack, &GuardPageSize, MEM_RELEASE);
461 return Status;
462 }
463
464 /* Now set the current Stack Limit */
465 InitialTeb->StackLimit = (PVOID)Stack;
466
467 /* Create a guard page if needed */
468 if (UseGuard)
469 {
470 GuardPageSize = PageSize;
472 (PVOID*)&Stack,
473 &GuardPageSize,
475 &Dummy);
476 if (!NT_SUCCESS(Status))
477 {
478 DPRINT1("Failure to set guard page\n");
479 return Status;
480 }
481
482 /* Update the Stack Limit keeping in mind the Guard Page */
483 InitialTeb->StackLimit = (PVOID)((ULONG_PTR)InitialTeb->StackLimit +
484 GuardPageSize);
485 }
486
487 /* We are done! */
488 return STATUS_SUCCESS;
489}
490
491/*
492 * NOTE: Adapted from sdk/lib/rtl/thread.c:RtlpFreeUserStack().
493 */
494VOID
495WINAPI
498 _In_ PINITIAL_TEB InitialTeb)
499{
500 SIZE_T Dummy = 0;
501
502 /* Free the Stack */
504 &InitialTeb->AllocatedStackBase,
505 &Dummy,
507}
508
509/*
510 * Creates the Initial Context for a Thread or Fiber
511 */
512VOID
513WINAPI
516 IN PVOID StartAddress,
517 IN PVOID StackAddress,
519{
520#ifdef _M_IX86
521 ULONG ContextFlags;
522 DPRINT("BaseInitializeContext: %p\n", Context);
523
524 /* Setup the Initial Win32 Thread Context */
525 Context->Eax = (ULONG)StartAddress;
526 Context->Ebx = (ULONG)Parameter;
527 Context->Esp = (ULONG)StackAddress;
528 /* The other registers are undefined */
529
530 /* Setup the Segments */
531 Context->SegFs = KGDT_R3_TEB;
532 Context->SegEs = KGDT_R3_DATA;
533 Context->SegDs = KGDT_R3_DATA;
534 Context->SegCs = KGDT_R3_CODE;
535 Context->SegSs = KGDT_R3_DATA;
536 Context->SegGs = 0;
537
538 /* Set the Context Flags */
539 ContextFlags = Context->ContextFlags;
540 Context->ContextFlags = CONTEXT_FULL;
541
542 /* Give it some room for the Parameter */
543 Context->Esp -= sizeof(PVOID);
544
545 /* Set the EFLAGS */
546 Context->EFlags = 0x3000; /* IOPL 3 */
547
548 /* What kind of context is being created? */
549 if (ContextType == 1)
550 {
551 /* For Threads */
553 }
554 else if (ContextType == 2)
555 {
556 /* This is a fiber: make space for the return address */
557 Context->Esp -= sizeof(PVOID);
558 *((PVOID*)Context->Esp) = BaseFiberStartup;
559
560 /* Is FPU state required? */
561 Context->ContextFlags |= ContextFlags;
562 if ((ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT)
563 {
564 /* Set an initial state */
565 Context->FloatSave.ControlWord = 0x27F;
566 Context->FloatSave.StatusWord = 0;
567 Context->FloatSave.TagWord = 0xFFFF;
568 Context->FloatSave.ErrorOffset = 0;
569 Context->FloatSave.ErrorSelector = 0;
570 Context->FloatSave.DataOffset = 0;
571 Context->FloatSave.DataSelector = 0;
572 if (SharedUserData->ProcessorFeatures[PF_XMMI_INSTRUCTIONS_AVAILABLE])
573 Context->Dr6 = 0x1F80;
574 }
575 }
576 else
577 {
578 /* For first thread in a Process */
580 }
581
582#elif defined(_M_AMD64)
583 DPRINT("BaseInitializeContext: %p\n", Context);
584 ASSERT(((ULONG_PTR)StackAddress & 15) == 0);
585
586 RtlZeroMemory(Context, sizeof(*Context));
587
588 /* Setup the Initial Win32 Thread Context */
589 Context->Rcx = (ULONG_PTR)StartAddress;
591 Context->Rsp = (ULONG_PTR)StackAddress - 5 * sizeof(PVOID);
592
593 /* Setup the Segments */
600
601 /* Set the EFLAGS */
602 Context->EFlags = 0x3000 | EFLAGS_INTERRUPT_MASK; /* IOPL 3 */
603
604 /* Set MXCSR */
605 Context->MxCsr = INITIAL_MXCSR;
606
607 if (ContextType == 1) /* For Threads */
608 {
610 }
611 else if (ContextType == 2) /* For Fibers */
612 {
614 }
615 else /* For first thread in a Process */
616 {
618 }
619
620 /* Set the Context Flags */
621 Context->ContextFlags = CONTEXT_FULL;
622#elif defined(_M_ARM)
623 DPRINT("BaseInitializeContext: %p\n", Context);
624
625 // FIXME: check if this is correct!
626 /* Setup the Initial Win32 Thread Context */
627 Context->R0 = (ULONG_PTR)StartAddress;
629 Context->Sp = (ULONG_PTR)StackAddress;
630
631 if (ContextType == 1) /* For Threads */
632 {
634 }
635 else if (ContextType == 2) /* For Fibers */
636 {
638 }
639 else /* For first thread in a Process */
640 {
642 }
643
644 /* Set the Context Flags */
645 Context->ContextFlags = CONTEXT_FULL;
646
647 /* Give it some room for the Parameter */
648 Context->Sp -= sizeof(PVOID);
649#else
650#warning Unknown architecture
653#endif
654}
655
656/*
657 * Checks if the privilege for Real-Time Priority is there
658 * Beware about this function behavior:
659 * - In case Keep is set to FALSE, then the function will only check
660 * whether real time is allowed and won't grant the privilege. In that case
661 * it will return TRUE if allowed, FALSE otherwise. Not a state!
662 * It means you don't have to release privilege when calling with FALSE.
663 */
664PVOID
665WINAPI
667{
669 PVOID State;
671
673 if (!NT_SUCCESS(Status)) return NULL;
674
675 if (!Keep)
676 {
678 State = (PVOID)TRUE;
679 }
680
681 return State;
682}
683
684/*
685 * Maps an image file into a section
686 */
688WINAPI
689BasepMapFile(IN LPCWSTR lpApplicationName,
692{
693 RTL_RELATIVE_NAME_U RelativeName;
696 HANDLE hFile = NULL;
698
699 DPRINT("BasepMapFile\n");
700
701 /* Zero out the Relative Directory */
702 RelativeName.ContainingDirectory = NULL;
703
704 /* Find the application name */
705 if (!RtlDosPathNameToNtPathName_U(lpApplicationName,
707 NULL,
708 &RelativeName))
709 {
711 }
712
713 DPRINT("ApplicationName %wZ\n", ApplicationName);
714 DPRINT("RelativeName %wZ\n", &RelativeName.RelativeName);
715
716 /* Did we get a relative name? */
717 if (RelativeName.RelativeName.Length)
718 {
719 ApplicationName = &RelativeName.RelativeName;
720 }
721
722 /* Initialize the Object Attributes */
726 RelativeName.ContainingDirectory,
727 NULL);
728
729 /* Try to open the executable */
736 if (!NT_SUCCESS(Status))
737 {
738 DPRINT1("Failed to open file\n");
740 return Status;
741 }
742
743 /* Create a section for this file */
746 NULL,
747 NULL,
749 SEC_IMAGE,
750 hFile);
751 NtClose(hFile);
752
753 /* Return status */
754 DPRINT("Section: %p for file: %p\n", *hSection, hFile);
755 return Status;
756}
757
758/*
759 * @implemented
760 */
762WINAPI
764{
766 BOOL Result;
767
769 if (NT_SUCCESS(Status))
770 {
771 Result = TRUE;
772 }
773 else
774 {
776 Result = FALSE;
777 }
778 return Result;
779}
780
781/*
782 * @implemented
783 */
784BOOL
785WINAPI
787{
789 BOOL Result;
790
792 if (NT_SUCCESS(Status))
793 {
794 Result = TRUE;
795 }
796 else
797 {
799 Result = FALSE;
800 }
801 return Result;
802}
803
804/*
805 * @implemented
806 */
807BOOL
808WINAPI
810{
812 BOOL Result;
813
814 Status = RtlWow64EnableFsRedirectionEx(OldValue, &OldValue);
815 if (NT_SUCCESS(Status))
816 {
817 Result = TRUE;
818 }
819 else
820 {
822 Result = FALSE;
823 }
824 return Result;
825}
826
827/*
828 * @implemented
829 */
830VOID
831WINAPI
833{
834 /* Set the correct Base Api */
839
840 /* FIXME: Old, deprecated way */
842}
843
844
845/*
846 * @implemented
847 */
848VOID
849WINAPI
851{
852 /* Set the correct Base Api */
857
858 /* FIXME: Old, deprecated way */
860}
861
862/*
863 * @implemented
864 */
865BOOL
866WINAPI
868{
870}
871
872/*
873 * @implemented
874 */
875VOID
876WINAPI
879{
883
884 /* If no attributes were given, get them */
885 if (!FileAttributes)
886 {
887 FileBasicInfo.FileAttributes = 0;
891 sizeof(FileBasicInfo),
893 FileAttributes = FileBasicInfo.FileAttributes;
894 }
895
896 /* If file is marked as RO, reset its attributes */
898 {
900 FileBasicInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL;
904 sizeof(FileBasicInfo),
906 }
907
908 /* Finally, mark the file for deletion */
909 FileDispositionInfo.DeleteFile = TRUE;
913 sizeof(FileDispositionInfo),
915}
916
917/*
918 * @unimplemented
919 */
921WINAPI
925 OUT PBOOLEAN InJob,
926 OUT PHANDLE NewToken,
927 OUT PHANDLE JobHandle)
928{
930
931 /* Validate that there's a name */
933 {
934 /* Validate that the required output parameters are there */
935 if ((InJob) && (NewToken) && (JobHandle))
936 {
937 /* Do the work (one day...) */
938 DPRINT("BasepCheckWinSaferRestrictions is UNIMPLEMENTED\n");
940 }
941 else
942 {
943 /* Act as if SEH hit this */
945 }
946 }
947 else
948 {
949 /* Input is invalid */
951 }
952
953 /* Return the status */
954 return Status;
955}
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
Definition: section.c:3076
#define NtCurrentPeb()
Definition: FLS.c:22
IN PUNICODE_STRING StaticString
#define EFLAGS_INTERRUPT_MASK
Definition: SystemCall.c:11
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
#define FILE_NON_DIRECTORY_FILE
Definition: constants.h:492
#define DPRINT1
Definition: precomp.h:8
WCHAR RootDirectory[MAX_PATH]
Definition: format.c:74
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirection(IN BOOLEAN Wow64FsEnableRedirection)
Definition: libsupp.c:1166
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirectionEx(IN PVOID Wow64FsEnableRedirection, OUT PVOID *OldFsRedirectionLevel)
Definition: libsupp.c:1178
#define SetLastError(x)
Definition: compat.h:752
@ ThreadImpersonationToken
Definition: compat.h:940
#define RtlImageNtHeader
Definition: compat.h:806
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
PBASE_STATIC_SERVER_DATA BaseStaticServerData
Definition: dllmain.c:19
HANDLE BaseNamedObjectDirectory
Definition: dllmain.c:24
PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
Definition: proc.c:23
DECLSPEC_NORETURN VOID WINAPI BaseProcessStartup(_In_ PPROCESS_START_ROUTINE lpStartAddress)
Definition: proc.c:449
DECLSPEC_NORETURN VOID WINAPI BaseThreadStartup(_In_ LPTHREAD_START_ROUTINE lpStartAddress, _In_ LPVOID lpParameter)
Definition: thread.c:56
PLARGE_INTEGER WINAPI BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout, IN DWORD dwMilliseconds)
Definition: utils.c:289
PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
Definition: utils.c:28
NTSTATUS WINAPI BaseCreateStack(_In_ HANDLE hProcess, _In_opt_ SIZE_T StackCommit, _In_opt_ SIZE_T StackReserve, _Out_ PINITIAL_TEB InitialTeb)
Definition: utils.c:355
BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, IN LPCSTR String)
Definition: utils.c:226
HANDLE WINAPI BaseGetNamedObjectDirectory(VOID)
Definition: utils.c:64
BOOL WINAPI Wow64RevertWow64FsRedirection(IN PVOID OldValue)
Definition: utils.c:809
VOID WINAPI BaseMarkFileForDelete(IN HANDLE FileHandle, IN ULONG FileAttributes)
Definition: utils.c:877
VOID NTAPI BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry, IN PVOID Context, OUT BOOLEAN *StopEnumeration)
Definition: utils.c:157
VOID WINAPI BaseInitializeContext(IN PCONTEXT Context, IN PVOID Parameter, IN PVOID StartAddress, IN PVOID StackAddress, IN ULONG ContextType)
Definition: utils.c:514
PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
Definition: utils.c:30
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
Definition: utils.c:27
ULONG NTAPI BasepUnicodeStringToOemSize(IN PUNICODE_STRING String)
Definition: utils.c:36
NTSTATUS WINAPI BasepMapFile(IN LPCWSTR lpApplicationName, OUT PHANDLE hSection, IN PUNICODE_STRING ApplicationName)
Definition: utils.c:689
POBJECT_ATTRIBUTES WINAPI BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes, IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL, IN PUNICODE_STRING ObjectName)
Definition: utils.c:305
PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString(IN LPCSTR String)
Definition: utils.c:189
PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
Definition: utils.c:29
BOOLEAN WINAPI Wow64EnableWow64FsRedirection(IN BOOLEAN Wow64EnableWow64FsRedirection)
Definition: utils.c:763
VOID WINAPI BaseFreeThreadStack(_In_ HANDLE hProcess, _In_ PINITIAL_TEB InitialTeb)
Definition: utils.c:496
VOID WINAPI BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString, OUT LPWSTR *UnicodeString)
Definition: utils.c:264
ULONG NTAPI BasepOemStringToUnicodeSize(IN PANSI_STRING String)
Definition: utils.c:43
NTSTATUS WINAPI BasepCheckWinSaferRestrictions(IN HANDLE UserToken, IN LPWSTR ApplicationName, IN HANDLE FileHandle, OUT PBOOLEAN InJob, OUT PHANDLE NewToken, OUT PHANDLE JobHandle)
Definition: utils.c:922
BOOL WINAPI Wow64DisableWow64FsRedirection(IN PVOID *OldValue)
Definition: utils.c:786
ULONG NTAPI BasepAnsiStringToUnicodeSize(IN PANSI_STRING String)
Definition: utils.c:57
ULONG NTAPI BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String)
Definition: utils.c:50
UNICODE_STRING Restricted
Definition: utils.c:24
PVOID WINAPI BasepIsRealtimeAllowed(IN BOOLEAN Keep)
Definition: utils.c:666
BOOL bIsFileApiAnsi
Definition: utils.c:25
void WINAPI DECLSPEC_HOTPATCH SetFileApisToOEM(void)
Definition: file.c:2897
void WINAPI DECLSPEC_HOTPATCH SetFileApisToANSI(void)
Definition: file.c:2888
BOOL WINAPI DECLSPEC_HOTPATCH AreFileApisANSI(void)
Definition: file.c:483
@ AnsiString
Definition: dnslib.h:19
#define L(x)
Definition: resources.c:13
#define INFINITE
Definition: serial.h:102
#define ULONG_PTR
Definition: config.h:101
#define ROUND_UP(n, align)
Definition: eventvwr.h:34
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE _In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Out_ PIO_STATUS_BLOCK _In_opt_ PLARGE_INTEGER _In_ ULONG FileAttributes
Definition: fltkernel.h:1236
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
Definition: fltkernel.h:1231
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE ContextType
Definition: fltkernel.h:1443
#define STATUS_ACCESS_VIOLATION
@ FileBasicInformation
Definition: from_kernel.h:65
@ FileDispositionInformation
Definition: from_kernel.h:74
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
Status
Definition: gdiplustypes.h:25
#define OBJ_OPENIF
Definition: winternl.h:229
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define OBJ_INHERIT
Definition: winternl.h:225
NTSYSAPI void WINAPI RtlReleasePebLock(void)
Definition: libsupp.c:84
NTSYSAPI NTSTATUS WINAPI RtlInitAnsiStringEx(PANSI_STRING, PCSZ)
NTSYSAPI void WINAPI RtlAcquirePebLock(void)
Definition: libsupp.c:74
NTSYSAPI void WINAPI DbgBreakPoint(void)
#define NtCurrentThread()
Definition: winternl.h:5368
#define NtCurrentTeb
ULONG(NTAPI * PRTL_COUNT_STRINGA)(IN PANSI_STRING UnicodeString)
Definition: kernel32.h:282
VOID WINAPI BaseThreadStartupThunk(VOID)
ULONG(NTAPI * PRTL_COUNT_STRING)(IN PUNICODE_STRING UnicodeString)
Definition: kernel32.h:276
DECLSPEC_NORETURN VOID WINAPI BaseFiberStartup(VOID)
NTSTATUS(NTAPI * PRTL_CONVERT_STRING)(IN PUNICODE_STRING UnicodeString, IN PANSI_STRING AnsiString, IN BOOLEAN AllocateMemory)
Definition: kernel32.h:272
VOID WINAPI BaseProcessStartThunk(VOID)
NTSTATUS(NTAPI * PRTL_CONVERT_STRINGA)(IN PANSI_STRING AnsiString, IN PCUNICODE_STRING UnicodeString, IN BOOLEAN AllocateMemory)
Definition: kernel32.h:278
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:71
@ FileDispositionInfo
Definition: minwinbase.h:308
@ FileBasicInfo
Definition: minwinbase.h:304
#define ASSERT(a)
Definition: mode.c:44
PVOID PVOID PWCHAR ApplicationName
Definition: env.c:47
#define SE_INC_BASE_PRIORITY_PRIVILEGE
Definition: security.c:668
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
_In_ HANDLE hFile
Definition: mswsock.h:90
#define KGDT64_R3_CODE
Definition: ketypes.h:131
#define KGDT64_R3_DATA
Definition: ketypes.h:130
#define KGDT64_R3_CMTEB
Definition: ketypes.h:133
#define RPL_MASK
Definition: ketypes.h:124
#define KGDT_R3_DATA
Definition: ketypes.h:126
#define KGDT_R3_CODE
Definition: ketypes.h:125
#define KGDT_R3_TEB
Definition: ketypes.h:129
#define SEC_IMAGE
Definition: mmtypes.h:97
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToOemString(POEM_STRING DestinationString, PCUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI NTSTATUS NTAPI RtlAcquirePrivilege(_In_ PULONG Privilege, _In_ ULONG NumPriv, _In_ ULONG Flags, _Out_ PVOID *ReturnedState)
NTSYSAPI NTSTATUS NTAPI RtlOemStringToUnicodeString(PUNICODE_STRING DestinationString, PCOEM_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlReleasePrivilege(_In_ PVOID ReturnedState)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
Definition: file.c:3953
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
#define SYNCHRONIZE
Definition: nt_native.h:61
#define DIRECTORY_CREATE_OBJECT
Definition: nt_native.h:1259
#define FILE_READ_DATA
Definition: nt_native.h:628
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define PAGE_READWRITE
Definition: nt_native.h:1307
#define SECTION_ALL_ACCESS
Definition: nt_native.h:1296
#define DIRECTORY_QUERY
Definition: nt_native.h:1257
#define DIRECTORY_TRAVERSE
Definition: nt_native.h:1258
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
#define PAGE_EXECUTE
Definition: nt_native.h:1309
NTSYSAPI NTSTATUS NTAPI NtSetInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
Definition: iofunc.c:3096
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
#define CONTEXT_FLOATING_POINT
Definition: nt_native.h:1375
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
#define FILE_EXECUTE
Definition: nt_native.h:642
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
#define MEM_RESERVE
Definition: nt_native.h:1317
#define MEM_RELEASE
Definition: nt_native.h:1319
#define CONTEXT_FULL
Definition: nt_native.h:1378
#define DIRECTORY_CREATE_SUBDIRECTORY
Definition: nt_native.h:1260
#define MEM_COMMIT
Definition: nt_native.h:1316
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define RtlAnsiStringToUnicodeSize(STRING)
Definition: nt_native.h:404
#define PAGE_GUARD
Definition: nt_native.h:1313
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
NTSTATUS NTAPI NtFreeVirtualMemory(IN HANDLE ProcessHandle, IN PVOID *UBaseAddress, IN PSIZE_T URegionSize, IN ULONG FreeType)
Definition: virtual.c:5192
NTSTATUS NTAPI NtProtectVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UnsafeBaseAddress, IN OUT SIZE_T *UnsafeNumberOfBytesToProtect, IN ULONG NewAccessProtection, OUT PULONG UnsafeOldAccessProtection)
Definition: virtual.c:3076
NTSTATUS NTAPI NtAllocateVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UBaseAddress, IN ULONG_PTR ZeroBits, IN OUT PSIZE_T URegionSize, IN ULONG AllocationType, IN ULONG Protect)
Definition: virtual.c:4457
NTSTATUS NTAPI NtSetInformationThread(_In_ HANDLE ThreadHandle, _In_ THREADINFOCLASS ThreadInformationClass, _In_reads_bytes_(ThreadInformationLength) PVOID ThreadInformation, _In_ ULONG ThreadInformationLength)
Definition: query.c:2268
NTSTATUS NTAPI NtOpenThreadToken(_In_ HANDLE ThreadHandle, _In_ ACCESS_MASK DesiredAccess, _In_ BOOLEAN OpenAsSelf, _Out_ PHANDLE TokenHandle)
Opens a token that is tied to a thread handle.
Definition: token.c:2475
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:455
#define STATUS_INVALID_IMAGE_FORMAT
Definition: ntstatus.h:453
NTSTATUS NTAPI NtOpenDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: obdir.c:393
static ULONG Timeout
Definition: ping.c:61
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:167
#define SharedUserData
#define INITIAL_MXCSR
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
#define DPRINT
Definition: sndvol32.h:73
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
base of all file and directory entries
Definition: entries.h:83
UNICODE_STRING NamedObjectDirectory
Definition: base.h:123
SYSTEM_BASIC_INFORMATION SysInfo
Definition: base.h:130
IMAGE_OPTIONAL_HEADER32 OptionalHeader
Definition: ntddk_ex.h:184
Definition: btrfs_drv.h:1876
UNICODE_STRING RelativeName
Definition: rtltypes.h:1374
HANDLE ContainingDirectory
Definition: rtltypes.h:1375
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
unsigned char * PBOOLEAN
Definition: typedefs.h:53
#define NTAPI
Definition: typedefs.h:36
void * PVOID
Definition: typedefs.h:50
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
#define STATUS_OBJECT_PATH_NOT_FOUND
Definition: udferr_usr.h:151
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
BOOL Privilege(LPTSTR pszPrivilege, BOOL bEnable)
Definition: user_lib.cpp:531
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
#define WINAPI
Definition: msvc.h:6
#define ERROR_FILENAME_EXCED_RANGE
Definition: winerror.h:385
_In_ const BITMAPINFO _In_ UINT _In_opt_ HANDLE hSection
Definition: wingdi.h:3685
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
Definition: wsk.h:191
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
Definition: cmfuncs.h:64
#define PF_XMMI_INSTRUCTIONS_AVAILABLE
Definition: ketypes.h:182
#define RtlOemStringToUnicodeSize(STRING)
#define RtlUnicodeStringToOemSize(STRING)
#define RtlUnicodeStringToAnsiSize(String)
Definition: rtlfuncs.h:1022
_Inout_opt_ PVOID Parameter
Definition: rtltypes.h:336
#define TOKEN_IMPERSONATE
Definition: setypes.h:939
const char * LPCSTR
Definition: xmlstorage.h:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
WCHAR * LPWSTR
Definition: xmlstorage.h:184