ReactOS  0.4.15-dev-3442-gc05a45e
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 
25 BOOL bIsFileApiAnsi = TRUE; // set the file api to ansi or oem
30 
31 /* FUNCTIONS ******************************************************************/
32 
33 ULONG
34 NTAPI
36 {
38 }
39 
40 ULONG
41 NTAPI
43 {
45 }
46 
47 ULONG
48 NTAPI
50 {
52 }
53 
54 ULONG
55 NTAPI
57 {
59 }
60 
61 HANDLE
62 WINAPI
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  {
86  NtClose(Token);
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 
135  if (NT_SUCCESS(Status)) BaseNamedObjectDirectory = BnoHandle;
136 
137 Quickie:
138 
140 
141  if (Token)
142  {
145  &Token,
146  sizeof(Token));
147 
148  NtClose(Token);
149  }
150 
152 }
153 
154 VOID
155 NTAPI
157  IN PVOID Context,
158  OUT BOOLEAN *StopEnumeration)
159 {
160  /* Make sure we get Entry, Context and valid StopEnumeration pointer */
161  ASSERT(Entry);
162  ASSERT(Context);
163  ASSERT(StopEnumeration);
164 
165  /* If entry is already found - signal to stop */
166  if (BasepExeLdrEntry)
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  */
187 WINAPI
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  */
223 BOOLEAN
224 WINAPI
226  IN LPCSTR String)
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 */
261 VOID
262 WINAPI
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 
274  if (NT_SUCCESS(RtlAnsiStringToUnicodeString(&UnicodeTemp,
275  &AnsiTemp,
276  TRUE)))
277  {
278  *UnicodeString = UnicodeTemp.Buffer;
279  }
280  else
281  {
282  *UnicodeString = NULL;
283  }
284 }
285 
287 WINAPI
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  */
303 WINAPI
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 */
339  ObjectName,
340  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  */
352 NTSTATUS
353 WINAPI
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,
419  MEM_RESERVE,
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,
453  MEM_COMMIT,
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  */
493 VOID
494 WINAPI
497  _In_ PINITIAL_TEB InitialTeb)
498 {
499  SIZE_T Dummy = 0;
500 
501  /* Free the Stack */
503  &InitialTeb->AllocatedStackBase,
504  &Dummy,
505  MEM_RELEASE);
506 }
507 
508 /*
509  * Creates the Initial Context for a Thread or Fiber
510  */
511 VOID
512 WINAPI
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;
589  Context->Rdx = (ULONG_PTR)Parameter;
590  Context->Rsp = (ULONG_PTR)StackAddress - 5 * sizeof(PVOID);
591 
592  /* Setup the Segments */
593  Context->SegGs = KGDT64_R3_DATA | RPL_MASK;
594  Context->SegEs = KGDT64_R3_DATA | RPL_MASK;
595  Context->SegDs = KGDT64_R3_DATA | RPL_MASK;
596  Context->SegCs = KGDT64_R3_CODE | RPL_MASK;
597  Context->SegSs = KGDT64_R3_DATA | RPL_MASK;
598  Context->SegFs = KGDT64_R3_CMTEB | RPL_MASK;
599 
600  /* Set the EFLAGS */
601  Context->EFlags = 0x3000 | EFLAGS_INTERRUPT_MASK; /* IOPL 3 */
602 
603  if (ContextType == 1) /* For Threads */
604  {
605  Context->Rip = (ULONG_PTR)BaseThreadStartup;
606  }
607  else if (ContextType == 2) /* For Fibers */
608  {
609  Context->Rip = (ULONG_PTR)BaseFiberStartup;
610  }
611  else /* For first thread in a Process */
612  {
614  }
615 
616  /* Set the Context Flags */
617  Context->ContextFlags = CONTEXT_FULL;
618 #elif defined(_M_ARM)
619  DPRINT("BaseInitializeContext: %p\n", Context);
620 
621  // FIXME: check if this is correct!
622  /* Setup the Initial Win32 Thread Context */
623  Context->R0 = (ULONG_PTR)StartAddress;
624  Context->R1 = (ULONG_PTR)Parameter;
625  Context->Sp = (ULONG_PTR)StackAddress;
626 
627  if (ContextType == 1) /* For Threads */
628  {
630  }
631  else if (ContextType == 2) /* For Fibers */
632  {
633  Context->Pc = (ULONG_PTR)BaseFiberStartup;
634  }
635  else /* For first thread in a Process */
636  {
638  }
639 
640  /* Set the Context Flags */
641  Context->ContextFlags = CONTEXT_FULL;
642 
643  /* Give it some room for the Parameter */
644  Context->Sp -= sizeof(PVOID);
645 #else
646 #warning Unknown architecture
648  DbgBreakPoint();
649 #endif
650 }
651 
652 /*
653  * Checks if the privilege for Real-Time Priority is there
654  * Beware about this function behavior:
655  * - In case Keep is set to FALSE, then the function will only check
656  * whether real time is allowed and won't grant the privilege. In that case
657  * it will return TRUE if allowed, FALSE otherwise. Not a state!
658  * It means you don't have to release privilege when calling with FALSE.
659  */
660 PVOID
661 WINAPI
663 {
665  PVOID State;
667 
669  if (!NT_SUCCESS(Status)) return NULL;
670 
671  if (!Keep)
672  {
674  State = (PVOID)TRUE;
675  }
676 
677  return State;
678 }
679 
680 /*
681  * Maps an image file into a section
682  */
683 NTSTATUS
684 WINAPI
685 BasepMapFile(IN LPCWSTR lpApplicationName,
688 {
689  RTL_RELATIVE_NAME_U RelativeName;
692  HANDLE hFile = NULL;
694 
695  DPRINT("BasepMapFile\n");
696 
697  /* Zero out the Relative Directory */
698  RelativeName.ContainingDirectory = NULL;
699 
700  /* Find the application name */
701  if (!RtlDosPathNameToNtPathName_U(lpApplicationName,
703  NULL,
704  &RelativeName))
705  {
707  }
708 
709  DPRINT("ApplicationName %wZ\n", ApplicationName);
710  DPRINT("RelativeName %wZ\n", &RelativeName.RelativeName);
711 
712  /* Did we get a relative name? */
713  if (RelativeName.RelativeName.Length)
714  {
715  ApplicationName = &RelativeName.RelativeName;
716  }
717 
718  /* Initialize the Object Attributes */
722  RelativeName.ContainingDirectory,
723  NULL);
724 
725  /* Try to open the executable */
729  &IoStatusBlock,
732  if (!NT_SUCCESS(Status))
733  {
734  DPRINT1("Failed to open file\n");
736  return Status;
737  }
738 
739  /* Create a section for this file */
742  NULL,
743  NULL,
744  PAGE_EXECUTE,
745  SEC_IMAGE,
746  hFile);
747  NtClose(hFile);
748 
749  /* Return status */
750  DPRINT("Section: %p for file: %p\n", *hSection, hFile);
751  return Status;
752 }
753 
754 /*
755  * @implemented
756  */
757 BOOLEAN
758 WINAPI
760 {
762  BOOL Result;
763 
765  if (NT_SUCCESS(Status))
766  {
767  Result = TRUE;
768  }
769  else
770  {
772  Result = FALSE;
773  }
774  return Result;
775 }
776 
777 /*
778  * @implemented
779  */
780 BOOL
781 WINAPI
783 {
785  BOOL Result;
786 
788  if (NT_SUCCESS(Status))
789  {
790  Result = TRUE;
791  }
792  else
793  {
795  Result = FALSE;
796  }
797  return Result;
798 }
799 
800 /*
801  * @implemented
802  */
803 BOOL
804 WINAPI
806 {
808  BOOL Result;
809 
810  Status = RtlWow64EnableFsRedirectionEx(OldValue, &OldValue);
811  if (NT_SUCCESS(Status))
812  {
813  Result = TRUE;
814  }
815  else
816  {
818  Result = FALSE;
819  }
820  return Result;
821 }
822 
823 /*
824  * @implemented
825  */
826 VOID
827 WINAPI
829 {
830  /* Set the correct Base Api */
835 
836  /* FIXME: Old, deprecated way */
838 }
839 
840 
841 /*
842  * @implemented
843  */
844 VOID
845 WINAPI
847 {
848  /* Set the correct Base Api */
853 
854  /* FIXME: Old, deprecated way */
856 }
857 
858 /*
859  * @implemented
860  */
861 BOOL
862 WINAPI
864 {
866 }
867 
868 /*
869  * @implemented
870  */
871 VOID
872 WINAPI
875 {
877  FILE_BASIC_INFORMATION FileBasicInfo;
878  FILE_DISPOSITION_INFORMATION FileDispositionInfo;
879 
880  /* If no attributes were given, get them */
881  if (!FileAttributes)
882  {
883  FileBasicInfo.FileAttributes = 0;
885  &IoStatusBlock,
886  &FileBasicInfo,
887  sizeof(FileBasicInfo),
889  FileAttributes = FileBasicInfo.FileAttributes;
890  }
891 
892  /* If file is marked as RO, reset its attributes */
894  {
895  RtlZeroMemory(&FileBasicInfo, sizeof(FileBasicInfo));
896  FileBasicInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL;
898  &IoStatusBlock,
899  &FileBasicInfo,
900  sizeof(FileBasicInfo),
902  }
903 
904  /* Finally, mark the file for deletion */
905  FileDispositionInfo.DeleteFile = TRUE;
907  &IoStatusBlock,
908  &FileDispositionInfo,
909  sizeof(FileDispositionInfo),
911 }
912 
913 /*
914  * @unimplemented
915  */
916 NTSTATUS
917 WINAPI
921  OUT PBOOLEAN InJob,
922  OUT PHANDLE NewToken,
923  OUT PHANDLE JobHandle)
924 {
926 
927  /* Validate that there's a name */
928  if ((ApplicationName) && *(ApplicationName))
929  {
930  /* Validate that the required output parameters are there */
931  if ((InJob) && (NewToken) && (JobHandle))
932  {
933  /* Do the work (one day...) */
934  DPRINT("BasepCheckWinSaferRestrictions is UNIMPLEMENTED\n");
936  }
937  else
938  {
939  /* Act as if SEH hit this */
941  }
942  }
943  else
944  {
945  /* Input is invalid */
947  }
948 
949  /* Return the status */
950  return Status;
951 }
#define KGDT64_R3_CODE
Definition: ketypes.h:76
PVOID WINAPI BasepIsRealtimeAllowed(IN BOOLEAN Keep)
Definition: utils.c:662
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
BOOL WINAPI Wow64RevertWow64FsRedirection(IN PVOID OldValue)
Definition: utils.c:805
NTSTATUS WINAPI BaseCreateStack(_In_ HANDLE hProcess, _In_opt_ SIZE_T StackCommit, _In_opt_ SIZE_T StackReserve, _Out_ PINITIAL_TEB InitialTeb)
Definition: utils.c:354
#define IN
Definition: typedefs.h:39
VOID WINAPI BaseInitializeContext(IN PCONTEXT Context, IN PVOID Parameter, IN PVOID StartAddress, IN PVOID StackAddress, IN ULONG ContextType)
Definition: utils.c:513
PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString(IN LPCSTR String)
Definition: utils.c:188
#define LL
Definition: tui.h:84
NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
ULONG(NTAPI * PRTL_COUNT_STRINGA)(IN PANSI_STRING UnicodeString)
Definition: kernel32.h:282
#define ROUND_UP(n, align)
Definition: eventvwr.h:31
#define _In_opt_
Definition: ms_sal.h:309
BOOL bIsFileApiAnsi
Definition: utils.c:25
WCHAR RootDirectory[MAX_PATH]
Definition: format.c:74
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:3433
struct _Entry Entry
Definition: kefuncs.h:627
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
PBASE_STATIC_SERVER_DATA BaseStaticServerData
Definition: dllmain.c:19
#define _Out_
Definition: ms_sal.h:345
NTSYSAPI NTSTATUS WINAPI RtlInitAnsiStringEx(PANSI_STRING, PCSZ)
#define TRUE
Definition: types.h:120
PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
Definition: utils.c:27
_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:182
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
VOID WINAPI BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString, OUT LPWSTR *UnicodeString)
Definition: utils.c:263
#define DIRECTORY_CREATE_OBJECT
Definition: nt_native.h:1256
NTSTATUS WINAPI BasepCheckWinSaferRestrictions(IN HANDLE UserToken, IN LPWSTR ApplicationName, IN HANDLE FileHandle, OUT PBOOLEAN InJob, OUT PHANDLE NewToken, OUT PHANDLE JobHandle)
Definition: utils.c:918
#define PAGE_GUARD
Definition: nt_native.h:1310
NTSYSAPI UINT WINAPI RtlOemStringToUnicodeSize(const STRING *)
NTSTATUS NTAPI NtOpenDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: obdir.c:393
ULONG NTAPI BasepAnsiStringToUnicodeSize(IN PANSI_STRING String)
Definition: utils.c:56
HANDLE ContainingDirectory
Definition: rtltypes.h:1379
NTSTATUS NTAPI NtProtectVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UnsafeBaseAddress, IN OUT SIZE_T *UnsafeNumberOfBytesToProtect, IN ULONG NewAccessProtection, OUT PULONG UnsafeOldAccessProtection)
Definition: virtual.c:3100
LONG NTSTATUS
Definition: precomp.h:26
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID _Out_ PHANDLE Token
NTSTATUS(NTAPI * PRTL_CONVERT_STRING)(IN PUNICODE_STRING UnicodeString, IN PANSI_STRING AnsiString, IN BOOLEAN AllocateMemory)
Definition: kernel32.h:272
#define NtCurrentThread()
#define CONTEXT_FLOATING_POINT
Definition: nt_native.h:1372
_In_ ULONG _In_ ULONG State
Definition: potypes.h:516
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirection(IN BOOLEAN Wow64FsEnableRedirection)
Definition: libsupp.c:1002
#define KGDT64_R3_CMTEB
Definition: ketypes.h:78
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
VOID NTAPI RtlReleasePebLock(VOID)
Definition: libsupp.c:82
#define TOKEN_IMPERSONATE
Definition: setypes.h:905
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
Definition: cmfuncs.h:62
_In_ PVOID Parameter
Definition: ldrtypes.h:241
#define MEM_COMMIT
Definition: nt_native.h:1313
PLARGE_INTEGER WINAPI BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout, IN DWORD dwMilliseconds)
Definition: utils.c:288
#define OBJ_OPENIF
Definition: winternl.h:229
#define FILE_SHARE_READ
Definition: compat.h:136
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
uint32_t ULONG_PTR
Definition: typedefs.h:65
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:636
HANDLE FileHandle
Definition: stats.c:38
#define SECTION_ALL_ACCESS
Definition: nt_native.h:1293
#define L(x)
Definition: ntvdm.h:50
BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, IN LPCSTR String)
Definition: utils.c:225
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2430
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define FALSE
Definition: types.h:117
VOID NTAPI DbgBreakPoint(VOID)
unsigned int BOOL
Definition: ntddk_ex.h:94
#define KGDT64_R3_DATA
Definition: ketypes.h:75
BOOL WINAPI AreFileApisANSI(VOID)
Definition: utils.c:863
PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
Definition: utils.c:29
NTSYSAPI DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *)
#define FILE_READ_DATA
Definition: nt_native.h:628
#define MEM_RESERVE
Definition: nt_native.h:1314
#define PF_XMMI_INSTRUCTIONS_AVAILABLE
VOID WINAPI SetFileApisToANSI(VOID)
Definition: utils.c:846
#define RPL_MASK
Definition: ketypes.h:69
UNICODE_STRING NamedObjectDirectory
Definition: base.h:115
unsigned char BOOLEAN
NTSYSAPI VOID NTAPI RtlReleasePrivilege(_In_ PVOID ReturnedState)
_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:426
#define _In_
Definition: ms_sal.h:308
#define PAGE_EXECUTE
Definition: nt_native.h:1306
#define KGDT_R3_DATA
Definition: ketypes.h:78
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:166
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSTATUS NTAPI NtSetInformationThread(IN HANDLE ThreadHandle, IN THREADINFOCLASS ThreadInformationClass, IN PVOID ThreadInformation, IN ULONG ThreadInformationLength)
Definition: query.c:2018
const char * LPCSTR
Definition: xmlstorage.h:183
void * PVOID
Definition: retypes.h:9
_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:1230
PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
Definition: proc.c:25
SYSTEM_BASIC_INFORMATION SysInfo
Definition: base.h:122
UNICODE_STRING Restricted
Definition: utils.c:24
#define DIRECTORY_TRAVERSE
Definition: nt_native.h:1255
Status
Definition: gdiplustypes.h:24
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:3951
ULONG NTAPI BasepUnicodeStringToOemSize(IN PUNICODE_STRING String)
Definition: utils.c:35
#define CONTEXT_FULL
Definition: nt_native.h:1375
HANDLE BaseNamedObjectDirectory
Definition: dllmain.c:24
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:6445
#define STATUS_INVALID_IMAGE_FORMAT
Definition: ntstatus.h:359
#define DIRECTORY_CREATE_SUBDIRECTORY
Definition: nt_native.h:1257
#define ASSERT(a)
Definition: mode.c:44
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define OBJ_INHERIT
Definition: winternl.h:225
#define WINAPI
Definition: msvc.h:6
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOLEAN WINAPI Wow64EnableWow64FsRedirection(IN BOOLEAN Wow64EnableWow64FsRedirection)
Definition: utils.c:759
VOID WINAPI BaseFreeThreadStack(_In_ HANDLE hProcess, _In_ PINITIAL_TEB InitialTeb)
Definition: utils.c:495
#define KGDT_R3_TEB
Definition: ketypes.h:81
#define STATUS_OBJECT_PATH_NOT_FOUND
Definition: udferr_usr.h:151
ULONG NTAPI BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String)
Definition: utils.c:49
#define SetLastError(x)
Definition: compat.h:611
BOOL Privilege(LPTSTR pszPrivilege, BOOL bEnable)
Definition: user_lib.cpp:531
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3398
NTSTATUS WINAPI BasepMapFile(IN LPCWSTR lpApplicationName, OUT PHANDLE hSection, IN PUNICODE_STRING ApplicationName)
Definition: utils.c:685
#define SharedUserData
char * PBOOLEAN
Definition: retypes.h:11
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:454
#define FILE_EXECUTE
Definition: nt_native.h:642
#define FILE_NON_DIRECTORY_FILE
Definition: constants.h:492
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToOemString(POEM_STRING DestinationString, PCUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
Definition: btrfs_drv.h:1922
#define SE_INC_BASE_PRIORITY_PRIVILEGE
Definition: security.c:668
NTSTATUS(NTAPI * PRTL_CONVERT_STRINGA)(IN PANSI_STRING AnsiString, IN PCUNICODE_STRING UnicodeString, IN BOOLEAN AllocateMemory)
Definition: kernel32.h:278
VOID NTAPI BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry, IN PVOID Context, OUT BOOLEAN *StopEnumeration)
Definition: utils.c:156
NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
#define SYNCHRONIZE
Definition: nt_native.h:61
_In_ HANDLE hFile
Definition: mswsock.h:90
NTSYSAPI NTSTATUS NTAPI RtlOemStringToUnicodeString(PUNICODE_STRING DestinationString, PCOEM_STRING SourceString, BOOLEAN AllocateDestinationString)
POBJECT_ATTRIBUTES WINAPI BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes, IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL, IN PUNICODE_STRING ObjectName)
Definition: utils.c:304
IMAGE_OPTIONAL_HEADER32 OptionalHeader
Definition: ntddk_ex.h:184
NTSYSAPI DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING *)
VOID WINAPI SetFileApisToOEM(VOID)
Definition: utils.c:828
HANDLE WINAPI BaseGetNamedObjectDirectory(VOID)
Definition: utils.c:63
ULONG_PTR SIZE_T
Definition: typedefs.h:80
VOID WINAPI BaseProcessStartup(PPROCESS_START_ROUTINE lpStartAddress)
Definition: proc.c:450
PVOID PVOID PWCHAR ApplicationName
Definition: env.c:47
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:4481
static ULONG Timeout
Definition: ping.c:61
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
ULONG(NTAPI * PRTL_COUNT_STRING)(IN PUNICODE_STRING UnicodeString)
Definition: kernel32.h:276
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
Definition: utils.c:28
#define NtCurrentPeb()
Definition: FLS.c:22
#define STATUS_ACCESS_VIOLATION
Definition: ntstatus.h:242
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirectionEx(IN PVOID Wow64FsEnableRedirection, OUT PVOID *OldFsRedirectionLevel)
Definition: libsupp.c:1014
ULONG NTAPI BasepOemStringToUnicodeSize(IN PANSI_STRING String)
Definition: utils.c:42
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#define NULL
Definition: types.h:112
NTSYSAPI DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING *)
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
Definition: utils.c:26
VOID NTAPI RtlAcquirePebLock(VOID)
Definition: libsupp.c:72
#define DPRINT1
Definition: precomp.h:8
#define RtlImageNtHeader
Definition: compat.h:665
NTSYSAPI NTSTATUS NTAPI RtlAcquirePrivilege(_In_ PULONG Privilege, _In_ ULONG NumPriv, _In_ ULONG Flags, _Out_ PVOID *ReturnedState)
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
#define MEM_RELEASE
Definition: nt_native.h:1316
#define KGDT_R3_CODE
Definition: ketypes.h:77
#define OUT
Definition: typedefs.h:40
VOID WINAPI BaseProcessStartThunk(VOID)
unsigned int ULONG
Definition: retypes.h:1
#define DIRECTORY_QUERY
Definition: nt_native.h:1254
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE ContextType
Definition: fltkernel.h:1443
#define UNIMPLEMENTED
Definition: debug.h:115
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define ULONG_PTR
Definition: config.h:101
#define SEC_IMAGE
Definition: mmtypes.h:96
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
UNICODE_STRING RelativeName
Definition: rtltypes.h:1378
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define INFINITE
Definition: serial.h:102
_In_ const BITMAPINFO _In_ UINT _In_opt_ HANDLE hSection
Definition: wingdi.h:3239
base of all file and directory entries
Definition: entries.h:82
IN PUNICODE_STRING StaticString
VOID WINAPI BaseThreadStartupThunk(VOID)
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 PAGE_READWRITE
Definition: nt_native.h:1304
BOOL WINAPI Wow64DisableWow64FsRedirection(IN PVOID *OldValue)
Definition: utils.c:782
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
#define EFLAGS_INTERRUPT_MASK
Definition: ketypes.h:126
#define ERROR_FILENAME_EXCED_RANGE
Definition: winerror.h:263
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
VOID WINAPI BaseMarkFileForDelete(IN HANDLE FileHandle, IN ULONG FileAttributes)
Definition: utils.c:873
NTSTATUS NTAPI NtFreeVirtualMemory(IN HANDLE ProcessHandle, IN PVOID *UBaseAddress, IN PSIZE_T URegionSize, IN ULONG FreeType)
Definition: virtual.c:5204
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68