ReactOS 0.4.15-dev-8145-ga541a46
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
30
31/* FUNCTIONS ******************************************************************/
32
36{
38}
39
43{
45}
46
50{
52}
53
57{
59}
60
64{
67 HANDLE DirHandle, BnoHandle, Token, NewToken;
68
70
71 if (NtCurrentTeb()->IsImpersonating)
72 {
75 TRUE,
76 &Token);
78
79 NewToken = NULL;
82 &NewToken,
83 sizeof(HANDLE));
84 if (!NT_SUCCESS (Status))
85 {
88 }
89 }
90 else
91 {
92 Token = NULL;
93 }
94
96 if (BaseNamedObjectDirectory) goto Quickie;
97
101 NULL,
102 NULL);
103
104 Status = NtOpenDirectoryObject(&BnoHandle,
110 if (!NT_SUCCESS(Status))
111 {
112 Status = NtOpenDirectoryObject(&DirHandle,
115
116 if (NT_SUCCESS(Status))
117 {
121 DirHandle,
122 NULL);
123
124 Status = NtOpenDirectoryObject(&BnoHandle,
130 NtClose(DirHandle);
131
132 }
133 }
134
136
137Quickie:
138
140
141 if (Token)
142 {
145 &Token,
146 sizeof(Token));
147
148 NtClose(Token);
149 }
150
152}
153
154VOID
155NTAPI
158 OUT BOOLEAN *StopEnumeration)
159{
160 /* Make sure we get Entry, Context and valid StopEnumeration pointer */
161 ASSERT(Entry);
163 ASSERT(StopEnumeration);
164
165 /* If entry is already found - signal to stop */
167 {
168 *StopEnumeration = TRUE;
169 return;
170 }
171
172 /* Otherwise keep enumerating until we find a match */
173 if (Entry->DllBase == Context)
174 {
175 /* It matches, so remember the ldr entry */
177
178 /* And stop enumeration */
179 *StopEnumeration = TRUE;
180 }
181}
182
183/*
184 * Converts an ANSI or OEM String to the TEB StaticUnicodeString
185 */
187WINAPI
189{
190 PUNICODE_STRING StaticString = &(NtCurrentTeb()->StaticUnicodeString);
193
194 /* Initialize an ANSI String */
196 if (!NT_SUCCESS(Status))
197 {
199 }
200 else
201 {
202 /* Convert it */
204 }
205
206 if (NT_SUCCESS(Status)) return StaticString;
207
209 {
211 }
212 else
213 {
215 }
216
217 return NULL;
218}
219
220/*
221 * Allocates space from the Heap and converts an Unicode String into it
222 */
224WINAPI
227{
230
231 /* Initialize an ANSI String */
233 if (!NT_SUCCESS(Status))
234 {
236 }
237 else
238 {
239 /* Convert it */
241 }
242
243 if (NT_SUCCESS(Status)) return TRUE;
244
246 {
248 }
249 else
250 {
252 }
253
254 return FALSE;
255}
256
257/*
258 * Allocates space from the Heap and converts an Ansi String into it
259 */
260 /*NOTE: API IS A HACK */
261VOID
262WINAPI
265{
266 ANSI_STRING AnsiTemp;
267 UNICODE_STRING UnicodeTemp;
268
269 DPRINT("BasepAnsiStringToHeapUnicodeString\n");
270
271 /* First create the ANSI_STRING */
272 RtlInitAnsiString(&AnsiTemp, AnsiString);
273
275 &AnsiTemp,
276 TRUE)))
277 {
278 *UnicodeString = UnicodeTemp.Buffer;
279 }
280 else
281 {
283 }
284}
285
287WINAPI
289 IN DWORD dwMilliseconds)
290{
291 /* Check if this is an infinite wait, which means no timeout argument */
292 if (dwMilliseconds == INFINITE) return NULL;
293
294 /* Otherwise, convert the time to NT Format */
295 Timeout->QuadPart = dwMilliseconds * -10000LL;
296 return Timeout;
297}
298
299/*
300 * Converts lpSecurityAttributes + Object Name into ObjectAttributes.
301 */
303WINAPI
305 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL,
307{
311 DPRINT("BaseFormatObjectAttributes. Security: %p, Name: %p\n",
312 SecurityAttributes, ObjectName);
313
314 /* Get the attributes if present */
315 if (SecurityAttributes)
316 {
317 Attributes = SecurityAttributes->bInheritHandle ? OBJ_INHERIT : 0;
318 SecurityDescriptor = SecurityAttributes->lpSecurityDescriptor;
319 }
320 else
321 {
322 if (!ObjectName) return NULL;
323 Attributes = 0;
325 }
326
327 if (ObjectName)
328 {
331 }
332 else
333 {
335 }
336
337 /* Create the Object Attributes */
343 DPRINT("Attributes: %lx, RootDirectory: %p, SecurityDescriptor: %p\n",
345 return ObjectAttributes;
346}
347
348/*
349 * Creates a stack for a thread or fiber.
350 * NOTE: Adapted from sdk/lib/rtl/thread.c:RtlpCreateUserStack().
351 */
353WINAPI
356 _In_opt_ SIZE_T StackCommit,
357 _In_opt_ SIZE_T StackReserve,
358 _Out_ PINITIAL_TEB InitialTeb)
359{
361 PIMAGE_NT_HEADERS Headers;
363 BOOLEAN UseGuard;
364 ULONG PageSize, AllocationGranularity, Dummy;
365 SIZE_T MinimumStackCommit, GuardPageSize;
366
367 DPRINT("BaseCreateStack(hProcess: 0x%p, Max: 0x%lx, Current: 0x%lx)\n",
368 hProcess, StackReserve, StackCommit);
369
370 /* Read page size */
372 AllocationGranularity = BaseStaticServerData->SysInfo.AllocationGranularity;
373
374 /* Get the Image Headers */
375 Headers = RtlImageNtHeader(NtCurrentPeb()->ImageBaseAddress);
376 if (!Headers) return STATUS_INVALID_IMAGE_FORMAT;
377
378 if (StackReserve == 0)
379 StackReserve = Headers->OptionalHeader.SizeOfStackReserve;
380
381 if (StackCommit == 0)
382 {
383 StackCommit = Headers->OptionalHeader.SizeOfStackCommit;
384 }
385 /* Check if the commit is higher than the reserve */
386 else if (StackCommit >= StackReserve)
387 {
388 /* Grow the reserve beyond the commit, up to 1MB alignment */
389 StackReserve = ROUND_UP(StackCommit, 1024 * 1024);
390 }
391
392 /* Align everything to Page Size */
393 StackCommit = ROUND_UP(StackCommit, PageSize);
394 StackReserve = ROUND_UP(StackReserve, AllocationGranularity);
395
396 MinimumStackCommit = NtCurrentPeb()->MinimumStackCommit;
397 if ((MinimumStackCommit != 0) && (StackCommit < MinimumStackCommit))
398 {
399 StackCommit = MinimumStackCommit;
400 }
401
402 /* Check if the commit is higher than the reserve */
403 if (StackCommit >= StackReserve)
404 {
405 /* Grow the reserve beyond the commit, up to 1MB alignment */
406 StackReserve = ROUND_UP(StackCommit, 1024 * 1024);
407 }
408
409 /* Align everything to Page Size */
410 StackCommit = ROUND_UP(StackCommit, PageSize);
411 StackReserve = ROUND_UP(StackReserve, AllocationGranularity);
412
413 /* Reserve memory for the stack */
414 Stack = 0;
416 (PVOID*)&Stack,
417 0,
418 &StackReserve,
421 if (!NT_SUCCESS(Status))
422 {
423 DPRINT1("Failure to reserve stack: %lx\n", Status);
424 return Status;
425 }
426
427 /* Now set up some basic Initial TEB Parameters */
428 InitialTeb->AllocatedStackBase = (PVOID)Stack;
429 InitialTeb->StackBase = (PVOID)(Stack + StackReserve);
430 InitialTeb->PreviousStackBase = NULL;
431 InitialTeb->PreviousStackLimit = NULL;
432
433 /* Update the stack position */
434 Stack += StackReserve - StackCommit;
435
436 /* Check if we can add a guard page */
437 if (StackReserve >= StackCommit + PageSize)
438 {
439 Stack -= PageSize;
440 StackCommit += PageSize;
441 UseGuard = TRUE;
442 }
443 else
444 {
445 UseGuard = FALSE;
446 }
447
448 /* Allocate memory for the stack */
450 (PVOID*)&Stack,
451 0,
452 &StackCommit,
455 if (!NT_SUCCESS(Status))
456 {
457 DPRINT1("Failure to allocate stack\n");
458 GuardPageSize = 0;
459 NtFreeVirtualMemory(hProcess, (PVOID*)&Stack, &GuardPageSize, MEM_RELEASE);
460 return Status;
461 }
462
463 /* Now set the current Stack Limit */
464 InitialTeb->StackLimit = (PVOID)Stack;
465
466 /* Create a guard page if needed */
467 if (UseGuard)
468 {
469 GuardPageSize = PageSize;
471 (PVOID*)&Stack,
472 &GuardPageSize,
474 &Dummy);
475 if (!NT_SUCCESS(Status))
476 {
477 DPRINT1("Failure to set guard page\n");
478 return Status;
479 }
480
481 /* Update the Stack Limit keeping in mind the Guard Page */
482 InitialTeb->StackLimit = (PVOID)((ULONG_PTR)InitialTeb->StackLimit +
483 GuardPageSize);
484 }
485
486 /* We are done! */
487 return STATUS_SUCCESS;
488}
489
490/*
491 * NOTE: Adapted from sdk/lib/rtl/thread.c:RtlpFreeUserStack().
492 */
493VOID
494WINAPI
497 _In_ PINITIAL_TEB InitialTeb)
498{
499 SIZE_T Dummy = 0;
500
501 /* Free the Stack */
503 &InitialTeb->AllocatedStackBase,
504 &Dummy,
506}
507
508/*
509 * Creates the Initial Context for a Thread or Fiber
510 */
511VOID
512WINAPI
515 IN PVOID StartAddress,
516 IN PVOID StackAddress,
518{
519#ifdef _M_IX86
520 ULONG ContextFlags;
521 DPRINT("BaseInitializeContext: %p\n", Context);
522
523 /* Setup the Initial Win32 Thread Context */
524 Context->Eax = (ULONG)StartAddress;
525 Context->Ebx = (ULONG)Parameter;
526 Context->Esp = (ULONG)StackAddress;
527 /* The other registers are undefined */
528
529 /* Setup the Segments */
530 Context->SegFs = KGDT_R3_TEB;
531 Context->SegEs = KGDT_R3_DATA;
532 Context->SegDs = KGDT_R3_DATA;
533 Context->SegCs = KGDT_R3_CODE;
534 Context->SegSs = KGDT_R3_DATA;
535 Context->SegGs = 0;
536
537 /* Set the Context Flags */
538 ContextFlags = Context->ContextFlags;
539 Context->ContextFlags = CONTEXT_FULL;
540
541 /* Give it some room for the Parameter */
542 Context->Esp -= sizeof(PVOID);
543
544 /* Set the EFLAGS */
545 Context->EFlags = 0x3000; /* IOPL 3 */
546
547 /* What kind of context is being created? */
548 if (ContextType == 1)
549 {
550 /* For Threads */
552 }
553 else if (ContextType == 2)
554 {
555 /* This is a fiber: make space for the return address */
556 Context->Esp -= sizeof(PVOID);
557 *((PVOID*)Context->Esp) = BaseFiberStartup;
558
559 /* Is FPU state required? */
560 Context->ContextFlags |= ContextFlags;
561 if ((ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT)
562 {
563 /* Set an initial state */
564 Context->FloatSave.ControlWord = 0x27F;
565 Context->FloatSave.StatusWord = 0;
566 Context->FloatSave.TagWord = 0xFFFF;
567 Context->FloatSave.ErrorOffset = 0;
568 Context->FloatSave.ErrorSelector = 0;
569 Context->FloatSave.DataOffset = 0;
570 Context->FloatSave.DataSelector = 0;
571 if (SharedUserData->ProcessorFeatures[PF_XMMI_INSTRUCTIONS_AVAILABLE])
572 Context->Dr6 = 0x1F80;
573 }
574 }
575 else
576 {
577 /* For first thread in a Process */
579 }
580
581#elif defined(_M_AMD64)
582 DPRINT("BaseInitializeContext: %p\n", Context);
583 ASSERT(((ULONG_PTR)StackAddress & 15) == 0);
584
585 RtlZeroMemory(Context, sizeof(*Context));
586
587 /* Setup the Initial Win32 Thread Context */
588 Context->Rcx = (ULONG_PTR)StartAddress;
590 Context->Rsp = (ULONG_PTR)StackAddress - 5 * sizeof(PVOID);
591
592 /* Setup the Segments */
599
600 /* Set the EFLAGS */
601 Context->EFlags = 0x3000 | EFLAGS_INTERRUPT_MASK; /* IOPL 3 */
602
603 /* Set MXCSR */
604 Context->MxCsr = INITIAL_MXCSR;
605
606 if (ContextType == 1) /* For Threads */
607 {
609 }
610 else if (ContextType == 2) /* For Fibers */
611 {
613 }
614 else /* For first thread in a Process */
615 {
617 }
618
619 /* Set the Context Flags */
620 Context->ContextFlags = CONTEXT_FULL;
621#elif defined(_M_ARM)
622 DPRINT("BaseInitializeContext: %p\n", Context);
623
624 // FIXME: check if this is correct!
625 /* Setup the Initial Win32 Thread Context */
626 Context->R0 = (ULONG_PTR)StartAddress;
628 Context->Sp = (ULONG_PTR)StackAddress;
629
630 if (ContextType == 1) /* For Threads */
631 {
633 }
634 else if (ContextType == 2) /* For Fibers */
635 {
637 }
638 else /* For first thread in a Process */
639 {
641 }
642
643 /* Set the Context Flags */
644 Context->ContextFlags = CONTEXT_FULL;
645
646 /* Give it some room for the Parameter */
647 Context->Sp -= sizeof(PVOID);
648#else
649#warning Unknown architecture
652#endif
653}
654
655/*
656 * Checks if the privilege for Real-Time Priority is there
657 * Beware about this function behavior:
658 * - In case Keep is set to FALSE, then the function will only check
659 * whether real time is allowed and won't grant the privilege. In that case
660 * it will return TRUE if allowed, FALSE otherwise. Not a state!
661 * It means you don't have to release privilege when calling with FALSE.
662 */
663PVOID
664WINAPI
666{
668 PVOID State;
670
672 if (!NT_SUCCESS(Status)) return NULL;
673
674 if (!Keep)
675 {
677 State = (PVOID)TRUE;
678 }
679
680 return State;
681}
682
683/*
684 * Maps an image file into a section
685 */
687WINAPI
688BasepMapFile(IN LPCWSTR lpApplicationName,
691{
692 RTL_RELATIVE_NAME_U RelativeName;
695 HANDLE hFile = NULL;
697
698 DPRINT("BasepMapFile\n");
699
700 /* Zero out the Relative Directory */
701 RelativeName.ContainingDirectory = NULL;
702
703 /* Find the application name */
704 if (!RtlDosPathNameToNtPathName_U(lpApplicationName,
706 NULL,
707 &RelativeName))
708 {
710 }
711
712 DPRINT("ApplicationName %wZ\n", ApplicationName);
713 DPRINT("RelativeName %wZ\n", &RelativeName.RelativeName);
714
715 /* Did we get a relative name? */
716 if (RelativeName.RelativeName.Length)
717 {
718 ApplicationName = &RelativeName.RelativeName;
719 }
720
721 /* Initialize the Object Attributes */
725 RelativeName.ContainingDirectory,
726 NULL);
727
728 /* Try to open the executable */
735 if (!NT_SUCCESS(Status))
736 {
737 DPRINT1("Failed to open file\n");
739 return Status;
740 }
741
742 /* Create a section for this file */
745 NULL,
746 NULL,
748 SEC_IMAGE,
749 hFile);
750 NtClose(hFile);
751
752 /* Return status */
753 DPRINT("Section: %p for file: %p\n", *hSection, hFile);
754 return Status;
755}
756
757/*
758 * @implemented
759 */
761WINAPI
763{
765 BOOL Result;
766
768 if (NT_SUCCESS(Status))
769 {
770 Result = TRUE;
771 }
772 else
773 {
775 Result = FALSE;
776 }
777 return Result;
778}
779
780/*
781 * @implemented
782 */
783BOOL
784WINAPI
786{
788 BOOL Result;
789
791 if (NT_SUCCESS(Status))
792 {
793 Result = TRUE;
794 }
795 else
796 {
798 Result = FALSE;
799 }
800 return Result;
801}
802
803/*
804 * @implemented
805 */
806BOOL
807WINAPI
809{
811 BOOL Result;
812
813 Status = RtlWow64EnableFsRedirectionEx(OldValue, &OldValue);
814 if (NT_SUCCESS(Status))
815 {
816 Result = TRUE;
817 }
818 else
819 {
821 Result = FALSE;
822 }
823 return Result;
824}
825
826/*
827 * @implemented
828 */
829VOID
830WINAPI
832{
833 /* Set the correct Base Api */
838
839 /* FIXME: Old, deprecated way */
841}
842
843
844/*
845 * @implemented
846 */
847VOID
848WINAPI
850{
851 /* Set the correct Base Api */
856
857 /* FIXME: Old, deprecated way */
859}
860
861/*
862 * @implemented
863 */
864BOOL
865WINAPI
867{
869}
870
871/*
872 * @implemented
873 */
874VOID
875WINAPI
878{
880 FILE_BASIC_INFORMATION FileBasicInfo;
881 FILE_DISPOSITION_INFORMATION FileDispositionInfo;
882
883 /* If no attributes were given, get them */
884 if (!FileAttributes)
885 {
886 FileBasicInfo.FileAttributes = 0;
889 &FileBasicInfo,
890 sizeof(FileBasicInfo),
892 FileAttributes = FileBasicInfo.FileAttributes;
893 }
894
895 /* If file is marked as RO, reset its attributes */
897 {
898 RtlZeroMemory(&FileBasicInfo, sizeof(FileBasicInfo));
902 &FileBasicInfo,
903 sizeof(FileBasicInfo),
905 }
906
907 /* Finally, mark the file for deletion */
908 FileDispositionInfo.DeleteFile = TRUE;
911 &FileDispositionInfo,
912 sizeof(FileDispositionInfo),
914}
915
916/*
917 * @unimplemented
918 */
920WINAPI
924 OUT PBOOLEAN InJob,
925 OUT PHANDLE NewToken,
926 OUT PHANDLE JobHandle)
927{
929
930 /* Validate that there's a name */
932 {
933 /* Validate that the required output parameters are there */
934 if ((InJob) && (NewToken) && (JobHandle))
935 {
936 /* Do the work (one day...) */
937 DPRINT("BasepCheckWinSaferRestrictions is UNIMPLEMENTED\n");
939 }
940 else
941 {
942 /* Act as if SEH hit this */
944 }
945 }
946 else
947 {
948 /* Input is invalid */
950 }
951
952 /* Return the status */
953 return Status;
954}
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:3074
#define NtCurrentPeb()
Definition: FLS.c:22
unsigned char BOOLEAN
IN PUNICODE_STRING StaticString
#define EFLAGS_INTERRUPT_MASK
Definition: SystemCall.c:11
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: debug.h:118
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:32
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:25
DECLSPEC_NORETURN VOID WINAPI BaseProcessStartup(_In_ PPROCESS_START_ROUTINE lpStartAddress)
Definition: proc.c:451
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:288
PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
Definition: utils.c:27
NTSTATUS WINAPI BaseCreateStack(_In_ HANDLE hProcess, _In_opt_ SIZE_T StackCommit, _In_opt_ SIZE_T StackReserve, _Out_ PINITIAL_TEB InitialTeb)
Definition: utils.c:354
BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, IN LPCSTR String)
Definition: utils.c:225
HANDLE WINAPI BaseGetNamedObjectDirectory(VOID)
Definition: utils.c:63
BOOL WINAPI Wow64RevertWow64FsRedirection(IN PVOID OldValue)
Definition: utils.c:808
VOID WINAPI BaseMarkFileForDelete(IN HANDLE FileHandle, IN ULONG FileAttributes)
Definition: utils.c:876
VOID NTAPI BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry, IN PVOID Context, OUT BOOLEAN *StopEnumeration)
Definition: utils.c:156
VOID WINAPI BaseInitializeContext(IN PCONTEXT Context, IN PVOID Parameter, IN PVOID StartAddress, IN PVOID StackAddress, IN ULONG ContextType)
Definition: utils.c:513
PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
Definition: utils.c:29
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
Definition: utils.c:26
ULONG NTAPI BasepUnicodeStringToOemSize(IN PUNICODE_STRING String)
Definition: utils.c:35
NTSTATUS WINAPI BasepMapFile(IN LPCWSTR lpApplicationName, OUT PHANDLE hSection, IN PUNICODE_STRING ApplicationName)
Definition: utils.c:688
POBJECT_ATTRIBUTES WINAPI BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes, IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL, IN PUNICODE_STRING ObjectName)
Definition: utils.c:304
PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString(IN LPCSTR String)
Definition: utils.c:188
PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
Definition: utils.c:28
BOOLEAN WINAPI Wow64EnableWow64FsRedirection(IN BOOLEAN Wow64EnableWow64FsRedirection)
Definition: utils.c:762
VOID WINAPI BaseFreeThreadStack(_In_ HANDLE hProcess, _In_ PINITIAL_TEB InitialTeb)
Definition: utils.c:495
VOID WINAPI BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString, OUT LPWSTR *UnicodeString)
Definition: utils.c:263
ULONG NTAPI BasepOemStringToUnicodeSize(IN PANSI_STRING String)
Definition: utils.c:42
NTSTATUS WINAPI BasepCheckWinSaferRestrictions(IN HANDLE UserToken, IN LPWSTR ApplicationName, IN HANDLE FileHandle, OUT PBOOLEAN InJob, OUT PHANDLE NewToken, OUT PHANDLE JobHandle)
Definition: utils.c:921
BOOL WINAPI Wow64DisableWow64FsRedirection(IN PVOID *OldValue)
Definition: utils.c:785
ULONG NTAPI BasepAnsiStringToUnicodeSize(IN PANSI_STRING String)
Definition: utils.c:56
ULONG NTAPI BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String)
Definition: utils.c:49
UNICODE_STRING Restricted
Definition: utils.c:24
PVOID WINAPI BasepIsRealtimeAllowed(IN BOOLEAN Keep)
Definition: utils.c:665
BOOL bIsFileApiAnsi
Definition: utils.c:25
@ AnsiString
Definition: dnslib.h:19
#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
@ 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 NtCurrentTeb
ULONG(NTAPI * PRTL_COUNT_STRINGA)(IN PANSI_STRING UnicodeString)
Definition: kernel32.h:285
VOID WINAPI BaseThreadStartupThunk(VOID)
ULONG(NTAPI * PRTL_COUNT_STRING)(IN PUNICODE_STRING UnicodeString)
Definition: kernel32.h:279
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:275
VOID WINAPI BaseProcessStartThunk(VOID)
NTSTATUS(NTAPI * PRTL_CONVERT_STRINGA)(IN PANSI_STRING AnsiString, IN PCUNICODE_STRING UnicodeString, IN BOOLEAN AllocateMemory)
Definition: kernel32.h:281
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:71
#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
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define _Out_
Definition: ms_sal.h:345
#define _In_
Definition: ms_sal.h:308
#define _In_opt_
Definition: ms_sal.h:309
_In_ HANDLE hFile
Definition: mswsock.h:90
#define KGDT64_R3_CODE
Definition: ketypes.h:137
#define KGDT64_R3_DATA
Definition: ketypes.h:136
#define KGDT64_R3_CMTEB
Definition: ketypes.h:139
#define RPL_MASK
Definition: ketypes.h:130
#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)
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:3952
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:1256
#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:1304
#define SECTION_ALL_ACCESS
Definition: nt_native.h:1293
#define DIRECTORY_QUERY
Definition: nt_native.h:1254
#define DIRECTORY_TRAVERSE
Definition: nt_native.h:1255
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
#define PAGE_EXECUTE
Definition: nt_native.h:1306
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:1372
#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:1314
#define MEM_RELEASE
Definition: nt_native.h:1316
#define CONTEXT_FULL
Definition: nt_native.h:1375
#define DIRECTORY_CREATE_SUBDIRECTORY
Definition: nt_native.h:1257
#define MEM_COMMIT
Definition: nt_native.h:1313
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define RtlAnsiStringToUnicodeSize(STRING)
Definition: nt_native.h:404
#define PAGE_GUARD
Definition: nt_native.h:1310
NTSTATUS NTAPI NtFreeVirtualMemory(IN HANDLE ProcessHandle, IN PVOID *UBaseAddress, IN PSIZE_T URegionSize, IN ULONG FreeType)
Definition: virtual.c:5230
NTSTATUS NTAPI NtProtectVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UnsafeBaseAddress, IN OUT SIZE_T *UnsafeNumberOfBytesToProtect, IN ULONG NewAccessProtection, OUT PULONG UnsafeOldAccessProtection)
Definition: virtual.c:3111
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:4492
NTSTATUS NTAPI NtSetInformationThread(IN HANDLE ThreadHandle, IN THREADINFOCLASS ThreadInformationClass, IN PVOID ThreadInformation, IN ULONG ThreadInformationLength)
Definition: query.c:2018
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:2474
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:455
#define STATUS_INVALID_IMAGE_FORMAT
Definition: ntstatus.h:359
#define STATUS_ACCESS_VIOLATION
Definition: ntstatus.h:242
#define L(x)
Definition: ntvdm.h:50
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:166
#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:1380
HANDLE ContainingDirectory
Definition: rtltypes.h:1381
#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:2433
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
BOOL WINAPI AreFileApisANSI(void)
Definition: utils.c:866
VOID WINAPI SetFileApisToOEM(void)
Definition: utils.c:831
VOID WINAPI SetFileApisToANSI(void)
Definition: utils.c:849
#define WINAPI
Definition: msvc.h:6
#define ERROR_FILENAME_EXCED_RANGE
Definition: winerror.h:263
_In_ const BITMAPINFO _In_ UINT _In_opt_ HANDLE hSection
Definition: wingdi.h:3239
_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:130
#define RtlOemStringToUnicodeSize(STRING)
#define RtlUnicodeStringToOemSize(STRING)
#define RtlUnicodeStringToAnsiSize(String)
Definition: rtlfuncs.h:1005
_Inout_opt_ PVOID Parameter
Definition: rtltypes.h:323
#define TOKEN_IMPERSONATE
Definition: setypes.h:927
const char * LPCSTR
Definition: xmlstorage.h:183
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define NtCurrentThread()