ReactOS  0.4.12-dev-918-g6c6e7b8
utils.c File Reference
#include <k32.h>
#include <debug.h>
Include dependency graph for utils.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

ULONG NTAPI BasepUnicodeStringToOemSize (IN PUNICODE_STRING String)
 
ULONG NTAPI BasepOemStringToUnicodeSize (IN PANSI_STRING String)
 
ULONG NTAPI BasepUnicodeStringToAnsiSize (IN PUNICODE_STRING String)
 
ULONG NTAPI BasepAnsiStringToUnicodeSize (IN PANSI_STRING String)
 
HANDLE WINAPI BaseGetNamedObjectDirectory (VOID)
 
VOID NTAPI BasepLocateExeLdrEntry (IN PLDR_DATA_TABLE_ENTRY Entry, IN PVOID Context, OUT BOOLEAN *StopEnumeration)
 
PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString (IN LPCSTR String)
 
BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString (OUT PUNICODE_STRING UnicodeString, IN LPCSTR String)
 
VOID WINAPI BasepAnsiStringToHeapUnicodeString (IN LPCSTR AnsiString, OUT LPWSTR *UnicodeString)
 
PLARGE_INTEGER WINAPI BaseFormatTimeOut (OUT PLARGE_INTEGER Timeout, IN DWORD dwMilliseconds)
 
POBJECT_ATTRIBUTES WINAPI BaseFormatObjectAttributes (OUT POBJECT_ATTRIBUTES ObjectAttributes, IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL, IN PUNICODE_STRING ObjectName)
 
NTSTATUS WINAPI BaseCreateStack (HANDLE hProcess, SIZE_T StackCommit, SIZE_T StackReserve, PINITIAL_TEB InitialTeb)
 
VOID WINAPI BaseFreeThreadStack (IN HANDLE hProcess, IN PINITIAL_TEB InitialTeb)
 
VOID WINAPI BaseInitializeContext (IN PCONTEXT Context, IN PVOID Parameter, IN PVOID StartAddress, IN PVOID StackAddress, IN ULONG ContextType)
 
PVOID WINAPI BasepIsRealtimeAllowed (IN BOOLEAN Keep)
 
NTSTATUS WINAPI BasepMapFile (IN LPCWSTR lpApplicationName, OUT PHANDLE hSection, IN PUNICODE_STRING ApplicationName)
 
BOOLEAN WINAPI Wow64EnableWow64FsRedirection (IN BOOLEAN Wow64EnableWow64FsRedirection)
 
BOOL WINAPI Wow64DisableWow64FsRedirection (IN PVOID *OldValue)
 
BOOL WINAPI Wow64RevertWow64FsRedirection (IN PVOID OldValue)
 
VOID WINAPI SetFileApisToOEM (VOID)
 
VOID WINAPI SetFileApisToANSI (VOID)
 
BOOL WINAPI AreFileApisANSI (VOID)
 
VOID WINAPI BaseMarkFileForDelete (IN HANDLE FileHandle, IN ULONG FileAttributes)
 
NTSTATUS WINAPI BasepCheckWinSaferRestrictions (IN HANDLE UserToken, IN LPWSTR ApplicationName, IN HANDLE FileHandle, OUT PBOOLEAN InJob, OUT PHANDLE NewToken, OUT PHANDLE JobHandle)
 

Variables

UNICODE_STRING Restricted = RTL_CONSTANT_STRING(L"Restricted")
 
BOOL bIsFileApiAnsi = TRUE
 
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString = RtlAnsiStringToUnicodeString
 
PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString = RtlUnicodeStringToAnsiString
 
PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize = BasepUnicodeStringToAnsiSize
 
PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize = BasepAnsiStringToUnicodeSize
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 19 of file utils.c.

Function Documentation

◆ AreFileApisANSI()

BOOL WINAPI AreFileApisANSI ( VOID  )

Definition at line 854 of file utils.c.

855 {
857 }
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
Definition: utils.c:26

Referenced by cmpStrAW().

◆ BaseCreateStack()

NTSTATUS WINAPI BaseCreateStack ( HANDLE  hProcess,
SIZE_T  StackCommit,
SIZE_T  StackReserve,
PINITIAL_TEB  InitialTeb 
)

Definition at line 353 of file utils.c.

357 {
359  PIMAGE_NT_HEADERS Headers;
360  ULONG_PTR Stack;
361  BOOLEAN UseGuard;
362  ULONG PageSize, Dummy, AllocationGranularity;
363  SIZE_T StackReserveHeader, StackCommitHeader, GuardPageSize, GuaranteedStackCommit;
364  DPRINT("BaseCreateStack (hProcess: %p, Max: %lx, Current: %lx)\n",
365  hProcess, StackReserve, StackCommit);
366 
367  /* Read page size */
369  AllocationGranularity = BaseStaticServerData->SysInfo.AllocationGranularity;
370 
371  /* Get the Image Headers */
372  Headers = RtlImageNtHeader(NtCurrentPeb()->ImageBaseAddress);
373  if (!Headers) return STATUS_INVALID_IMAGE_FORMAT;
374 
375  StackCommitHeader = Headers->OptionalHeader.SizeOfStackCommit;
376  StackReserveHeader = Headers->OptionalHeader.SizeOfStackReserve;
377 
378  if (!StackReserve) StackReserve = StackReserveHeader;
379 
380  if (!StackCommit)
381  {
382  StackCommit = StackCommitHeader;
383  }
384  else if (StackCommit >= StackReserve)
385  {
386  StackReserve = ROUND_UP(StackCommit, 1024 * 1024);
387  }
388 
389  StackCommit = ROUND_UP(StackCommit, PageSize);
390  StackReserve = ROUND_UP(StackReserve, AllocationGranularity);
391 
392  GuaranteedStackCommit = NtCurrentTeb()->GuaranteedStackBytes;
393  if ((GuaranteedStackCommit) && (StackCommit < GuaranteedStackCommit))
394  {
395  StackCommit = GuaranteedStackCommit;
396  }
397 
398  if (StackCommit >= StackReserve)
399  {
400  StackReserve = ROUND_UP(StackCommit, 1024 * 1024);
401  }
402 
403  StackCommit = ROUND_UP(StackCommit, PageSize);
404  StackReserve = ROUND_UP(StackReserve, AllocationGranularity);
405 
406  /* Reserve memory for the stack */
407  Stack = 0;
409  (PVOID*)&Stack,
410  0,
411  &StackReserve,
412  MEM_RESERVE,
414  if (!NT_SUCCESS(Status))
415  {
416  DPRINT1("Failure to reserve stack: %lx\n", Status);
417  return Status;
418  }
419 
420  /* Now set up some basic Initial TEB Parameters */
421  InitialTeb->AllocatedStackBase = (PVOID)Stack;
422  InitialTeb->StackBase = (PVOID)(Stack + StackReserve);
423  InitialTeb->PreviousStackBase = NULL;
424  InitialTeb->PreviousStackLimit = NULL;
425 
426  /* Update the Stack Position */
427  Stack += StackReserve - StackCommit;
428 
429  /* Check if we will need a guard page */
430  if (StackReserve > StackCommit)
431  {
432  Stack -= PageSize;
433  StackCommit += PageSize;
434  UseGuard = TRUE;
435  }
436  else
437  {
438  UseGuard = FALSE;
439  }
440 
441  /* Allocate memory for the stack */
443  (PVOID*)&Stack,
444  0,
445  &StackCommit,
446  MEM_COMMIT,
448  if (!NT_SUCCESS(Status))
449  {
450  DPRINT1("Failure to allocate stack\n");
451  GuardPageSize = 0;
452  NtFreeVirtualMemory(hProcess, (PVOID*)&Stack, &GuardPageSize, MEM_RELEASE);
453  return Status;
454  }
455 
456  /* Now set the current Stack Limit */
457  InitialTeb->StackLimit = (PVOID)Stack;
458 
459  /* Create a guard page */
460  if (UseGuard)
461  {
462  /* Set the guard page */
463  GuardPageSize = PAGE_SIZE;
465  (PVOID*)&Stack,
466  &GuardPageSize,
468  &Dummy);
469  if (!NT_SUCCESS(Status))
470  {
471  DPRINT1("Failure to set guard page\n");
472  return Status;
473  }
474 
475  /* Update the Stack Limit keeping in mind the Guard Page */
476  InitialTeb->StackLimit = (PVOID)((ULONG_PTR)InitialTeb->StackLimit +
477  GuardPageSize);
478  }
479 
480  /* We are done! */
481  return STATUS_SUCCESS;
482 }
#define TRUE
Definition: types.h:120
#define ROUND_UP(n, align)
Definition: eventvwr.h:31
PBASE_STATIC_SERVER_DATA BaseStaticServerData
Definition: dllmain.c:19
#define PAGE_GUARD
Definition: nt_native.h:1310
NTSTATUS NTAPI NtProtectVirtualMemory(IN HANDLE ProcessHandle, IN OUT PVOID *UnsafeBaseAddress, IN OUT SIZE_T *UnsafeNumberOfBytesToProtect, IN ULONG NewAccessProtection, OUT PULONG UnsafeOldAccessProtection)
Definition: virtual.c:2986
LONG NTSTATUS
Definition: precomp.h:26
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
#define MEM_COMMIT
Definition: nt_native.h:1313
IMAGE_OPTIONAL_HEADER32 OptionalHeader
Definition: ntddk_ex.h:184
uint32_t ULONG_PTR
Definition: typedefs.h:63
#define MEM_RESERVE
Definition: nt_native.h:1314
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
PVOID StackBase
Definition: pstypes.h:678
void DPRINT(...)
Definition: polytest.cpp:61
void * PVOID
Definition: retypes.h:9
SYSTEM_BASIC_INFORMATION SysInfo
Definition: base.h:122
#define STATUS_INVALID_IMAGE_FORMAT
Definition: ntstatus.h:345
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
PVOID StackLimit
Definition: pstypes.h:679
PVOID AllocatedStackBase
Definition: pstypes.h:680
#define PAGE_SIZE
Definition: env_spec_w32.h:49
Status
Definition: gdiplustypes.h:24
ULONG_PTR SIZE_T
Definition: typedefs.h:78
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:4367
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
#define NtCurrentPeb()
Definition: FLS.c:19
#define DPRINT1
Definition: precomp.h:8
#define RtlImageNtHeader
Definition: compat.h:457
#define MEM_RELEASE
Definition: nt_native.h:1316
unsigned int ULONG
Definition: retypes.h:1
PVOID PreviousStackBase
Definition: pstypes.h:676
PVOID PreviousStackLimit
Definition: pstypes.h:677
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define PAGE_READWRITE
Definition: nt_native.h:1304
NTSTATUS NTAPI NtFreeVirtualMemory(IN HANDLE ProcessHandle, IN PVOID *UBaseAddress, IN PSIZE_T URegionSize, IN ULONG FreeType)
Definition: virtual.c:5090

Referenced by CreateFiberEx(), CreateProcessInternalW(), and CreateRemoteThread().

◆ BaseFormatObjectAttributes()

POBJECT_ATTRIBUTES WINAPI BaseFormatObjectAttributes ( OUT POBJECT_ATTRIBUTES  ObjectAttributes,
IN PSECURITY_ATTRIBUTES SecurityAttributes  OPTIONAL,
IN PUNICODE_STRING  ObjectName 
)

Definition at line 304 of file utils.c.

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 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
WCHAR RootDirectory[MAX_PATH]
Definition: format.c:74
_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
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
Definition: cmfuncs.h:62
#define OBJ_OPENIF
Definition: winternl.h:229
smooth NULL
Definition: ftsmooth.c:416
void DPRINT(...)
Definition: polytest.cpp:61
#define OBJ_INHERIT
Definition: winternl.h:225
HANDLE WINAPI BaseGetNamedObjectDirectory(VOID)
Definition: utils.c:63
_Must_inspect_result_ _In_ USHORT _In_ PHIDP_PREPARSED_DATA _Out_writes_to_ LengthAttributes PHIDP_EXTENDED_ATTRIBUTES Attributes
Definition: hidpi.h:348
unsigned int ULONG
Definition: retypes.h:1
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106

Referenced by CreateFileMappingW(), CreateProcessInternalW(), and CreateRemoteThread().

◆ BaseFormatTimeOut()

PLARGE_INTEGER WINAPI BaseFormatTimeOut ( OUT PLARGE_INTEGER  Timeout,
IN DWORD  dwMilliseconds 
)

Definition at line 288 of file utils.c.

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 }
#define LL
Definition: tui.h:72
smooth NULL
Definition: ftsmooth.c:416
static ULONG Timeout
Definition: ping.c:61
#define INFINITE
Definition: serial.h:102

Referenced by GetQueuedCompletionStatus(), SignalObjectAndWait(), SleepEx(), WaitForDebugEvent(), WaitForMultipleObjectsEx(), and WaitForSingleObjectEx().

◆ BaseFreeThreadStack()

VOID WINAPI BaseFreeThreadStack ( IN HANDLE  hProcess,
IN PINITIAL_TEB  InitialTeb 
)

Definition at line 486 of file utils.c.

488 {
489  SIZE_T Dummy = 0;
490 
491  /* Free the Stack */
493  &InitialTeb->AllocatedStackBase,
494  &Dummy,
495  MEM_RELEASE);
496 }
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
ULONG_PTR SIZE_T
Definition: typedefs.h:78
#define MEM_RELEASE
Definition: nt_native.h:1316
NTSTATUS NTAPI NtFreeVirtualMemory(IN HANDLE ProcessHandle, IN PVOID *UBaseAddress, IN PSIZE_T URegionSize, IN ULONG FreeType)
Definition: virtual.c:5090

Referenced by CreateRemoteThread().

◆ BaseGetNamedObjectDirectory()

HANDLE WINAPI BaseGetNamedObjectDirectory ( VOID  )

Definition at line 63 of file utils.c.

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 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define TRUE
Definition: types.h:120
PBASE_STATIC_SERVER_DATA BaseStaticServerData
Definition: dllmain.c:19
#define DIRECTORY_CREATE_OBJECT
Definition: nt_native.h:1256
NTSTATUS NTAPI NtOpenDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: obdir.c:359
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
#define NtCurrentThread()
VOID NTAPI RtlReleasePebLock(VOID)
Definition: libsupp.c:82
#define TOKEN_IMPERSONATE
Definition: setypes.h:873
UNICODE_STRING NamedObjectDirectory
Definition: base.h:115
smooth NULL
Definition: ftsmooth.c:416
NTSTATUS NTAPI NtSetInformationThread(IN HANDLE ThreadHandle, IN THREADINFOCLASS ThreadInformationClass, IN PVOID ThreadInformation, IN ULONG ThreadInformationLength)
Definition: query.c:1967
UNICODE_STRING Restricted
Definition: utils.c:24
#define DIRECTORY_TRAVERSE
Definition: nt_native.h:1255
HANDLE BaseNamedObjectDirectory
Definition: dllmain.c:24
#define DIRECTORY_CREATE_SUBDIRECTORY
Definition: nt_native.h:1257
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
Status
Definition: gdiplustypes.h:24
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
VOID NTAPI RtlAcquirePebLock(VOID)
Definition: libsupp.c:72
NTSTATUS NTAPI NtOpenThreadToken(IN HANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN BOOLEAN OpenAsSelf, OUT PHANDLE TokenHandle)
Definition: token.c:3858
#define DIRECTORY_QUERY
Definition: nt_native.h:1254
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106

Referenced by BaseFormatObjectAttributes(), and OpenFileMappingW().

◆ BaseInitializeContext()

VOID WINAPI BaseInitializeContext ( IN PCONTEXT  Context,
IN PVOID  Parameter,
IN PVOID  StartAddress,
IN PVOID  StackAddress,
IN ULONG  ContextType 
)

Definition at line 503 of file utils.c.

508 {
509 #ifdef _M_IX86
510  ULONG ContextFlags;
511  DPRINT("BaseInitializeContext: %p\n", Context);
512 
513  /* Setup the Initial Win32 Thread Context */
514  Context->Eax = (ULONG)StartAddress;
515  Context->Ebx = (ULONG)Parameter;
516  Context->Esp = (ULONG)StackAddress;
517  /* The other registers are undefined */
518 
519  /* Setup the Segments */
520  Context->SegFs = KGDT_R3_TEB;
521  Context->SegEs = KGDT_R3_DATA;
522  Context->SegDs = KGDT_R3_DATA;
523  Context->SegCs = KGDT_R3_CODE;
524  Context->SegSs = KGDT_R3_DATA;
525  Context->SegGs = 0;
526 
527  /* Set the Context Flags */
528  ContextFlags = Context->ContextFlags;
529  Context->ContextFlags = CONTEXT_FULL;
530 
531  /* Give it some room for the Parameter */
532  Context->Esp -= sizeof(PVOID);
533 
534  /* Set the EFLAGS */
535  Context->EFlags = 0x3000; /* IOPL 3 */
536 
537  /* What kind of context is being created? */
538  if (ContextType == 1)
539  {
540  /* For Threads */
542  }
543  else if (ContextType == 2)
544  {
545  /* This is a fiber: make space for the return address */
546  Context->Esp -= sizeof(PVOID);
547  *((PVOID*)Context->Esp) = BaseFiberStartup;
548 
549  /* Is FPU state required? */
550  Context->ContextFlags |= ContextFlags;
551  if ((ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT)
552  {
553  /* Set an initial state */
554  Context->FloatSave.ControlWord = 0x27F;
555  Context->FloatSave.StatusWord = 0;
556  Context->FloatSave.TagWord = 0xFFFF;
557  Context->FloatSave.ErrorOffset = 0;
558  Context->FloatSave.ErrorSelector = 0;
559  Context->FloatSave.DataOffset = 0;
560  Context->FloatSave.DataSelector = 0;
561  if (SharedUserData->ProcessorFeatures[PF_XMMI_INSTRUCTIONS_AVAILABLE])
562  Context->Dr6 = 0x1F80;
563  }
564  }
565  else
566  {
567  /* For first thread in a Process */
569  }
570 
571 #elif defined(_M_AMD64)
572  DPRINT("BaseInitializeContext: %p\n", Context);
573 
574  /* Setup the Initial Win32 Thread Context */
575  Context->Rax = (ULONG_PTR)StartAddress;
576  Context->Rbx = (ULONG_PTR)Parameter;
577  Context->Rsp = (ULONG_PTR)StackAddress;
578  /* The other registers are undefined */
579 
580  /* Setup the Segments */
581  Context->SegGs = KGDT64_R3_DATA | RPL_MASK;
582  Context->SegEs = KGDT64_R3_DATA | RPL_MASK;
583  Context->SegDs = KGDT64_R3_DATA | RPL_MASK;
584  Context->SegCs = KGDT64_R3_CODE | RPL_MASK;
585  Context->SegSs = KGDT64_R3_DATA | RPL_MASK;
586  Context->SegFs = KGDT64_R3_CMTEB | RPL_MASK;
587 
588  /* Set the EFLAGS */
589  Context->EFlags = 0x3000; /* IOPL 3 */
590 
591  if (ContextType == 1) /* For Threads */
592  {
594  }
595  else if (ContextType == 2) /* For Fibers */
596  {
597  Context->Rip = (ULONG_PTR)BaseFiberStartup;
598  }
599  else /* For first thread in a Process */
600  {
602  }
603 
604  /* Set the Context Flags */
605  Context->ContextFlags = CONTEXT_FULL;
606 
607  /* Give it some room for the Parameter */
608  Context->Rsp -= sizeof(PVOID);
609 #elif defined(_M_ARM)
610  DPRINT("BaseInitializeContext: %p\n", Context);
611 
612  // FIXME: check if this is correct!
613  /* Setup the Initial Win32 Thread Context */
614  Context->R0 = (ULONG_PTR)StartAddress;
615  Context->R1 = (ULONG_PTR)Parameter;
616  Context->Sp = (ULONG_PTR)StackAddress;
617 
618  if (ContextType == 1) /* For Threads */
619  {
621  }
622  else if (ContextType == 2) /* For Fibers */
623  {
624  Context->Pc = (ULONG_PTR)BaseFiberStartup;
625  }
626  else /* For first thread in a Process */
627  {
629  }
630 
631  /* Set the Context Flags */
632  Context->ContextFlags = CONTEXT_FULL;
633 
634  /* Give it some room for the Parameter */
635  Context->Sp -= sizeof(PVOID);
636 #else
637 #warning Unknown architecture
639  DbgBreakPoint();
640 #endif
641 }
#define KGDT64_R3_CODE
Definition: ketypes.h:76
#define KGDT64_R3_CMTEB
Definition: ketypes.h:78
#define CONTEXT_FULL
Definition: compat.h:270
_In_ PVOID Parameter
Definition: ldrtypes.h:240
void DbgBreakPoint()
Definition: mach.c:558
#define KGDT64_R3_DATA
Definition: ketypes.h:75
#define PF_XMMI_INSTRUCTIONS_AVAILABLE
#define RPL_MASK
Definition: ketypes.h:69
void DPRINT(...)
Definition: polytest.cpp:61
#define KGDT_R3_DATA
Definition: ketypes.h:77
void * PVOID
Definition: retypes.h:9
#define KGDT_R3_TEB
Definition: ketypes.h:80
#define SharedUserData
#define CONTEXT_FLOATING_POINT
Definition: compat.h:267
#define KGDT_R3_CODE
Definition: ketypes.h:76
VOID WINAPI BaseProcessStartThunk(VOID)
unsigned int ULONG
Definition: retypes.h:1
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE ContextType
Definition: fltkernel.h:1444
#define UNIMPLEMENTED
Definition: debug.h:114
#define ULONG_PTR
Definition: config.h:101
VOID WINAPI BaseThreadStartupThunk(VOID)

Referenced by CreateFiberEx(), CreateProcessInternalW(), and CreateRemoteThread().

◆ BaseMarkFileForDelete()

VOID WINAPI BaseMarkFileForDelete ( IN HANDLE  FileHandle,
IN ULONG  FileAttributes 
)

Definition at line 864 of file utils.c.

866 {
868  FILE_BASIC_INFORMATION FileBasicInfo;
869  FILE_DISPOSITION_INFORMATION FileDispositionInfo;
870 
871  /* If no attributes were given, get them */
872  if (!FileAttributes)
873  {
874  FileBasicInfo.FileAttributes = 0;
876  &IoStatusBlock,
877  &FileBasicInfo,
878  sizeof(FileBasicInfo),
880  FileAttributes = FileBasicInfo.FileAttributes;
881  }
882 
883  /* If file is marked as RO, reset its attributes */
885  {
886  RtlZeroMemory(&FileBasicInfo, sizeof(FileBasicInfo));
887  FileBasicInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL;
889  &IoStatusBlock,
890  &FileBasicInfo,
891  sizeof(FileBasicInfo),
893  }
894 
895  /* Finally, mark the file for deletion */
896  FileDispositionInfo.DeleteFile = TRUE;
898  &IoStatusBlock,
899  &FileDispositionInfo,
900  sizeof(FileDispositionInfo),
902 }
#define TRUE
Definition: types.h:120
HANDLE FileHandle
Definition: stats.c:38
_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
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
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:2934

Referenced by CreateDirectoryExW().

◆ Basep8BitStringToDynamicUnicodeString()

BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString ( OUT PUNICODE_STRING  UnicodeString,
IN LPCSTR  String 
)

Definition at line 225 of file utils.c.

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 }
#define TRUE
Definition: types.h:120
NTSYSAPI NTSTATUS WINAPI RtlInitAnsiStringEx(PANSI_STRING, PCSZ)
LONG NTSTATUS
Definition: precomp.h:26
static WCHAR String[]
Definition: stringtable.c:55
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:166
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define SetLastError(x)
Definition: compat.h:409
Status
Definition: gdiplustypes.h:24
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:61
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
Definition: utils.c:26
#define ERROR_FILENAME_EXCED_RANGE
Definition: winerror.h:263

Referenced by CopyFileA(), CopyFileExA(), CreateDirectoryExA(), CreateHardLinkA(), CreateProcessInternalA(), GetFullPathNameA(), GetLongPathNameA(), GetShortPathNameA(), GetTempFileNameA(), MoveFileWithProgressA(), ReplaceFileA(), SearchPathA(), SetVolumeLabelA(), and WaitNamedPipeA().

◆ Basep8BitStringToStaticUnicodeString()

PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString ( IN LPCSTR  String)

Definition at line 188 of file utils.c.

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 }
NTSYSAPI NTSTATUS WINAPI RtlInitAnsiStringEx(PANSI_STRING, PCSZ)
LONG NTSTATUS
Definition: precomp.h:26
static WCHAR String[]
Definition: stringtable.c:55
smooth NULL
Definition: ftsmooth.c:416
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:166
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define SetLastError(x)
Definition: compat.h:409
Status
Definition: gdiplustypes.h:24
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:61
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
Definition: utils.c:26
IN PUNICODE_STRING StaticString
#define ERROR_FILENAME_EXCED_RANGE
Definition: winerror.h:263

Referenced by CopyFileA(), CopyFileExA(), CreateDirectoryA(), CreateDirectoryExA(), CreateHardLinkA(), DeleteFileA(), FindFirstFileA(), FindFirstFileExA(), GetDiskFreeSpaceA(), GetDiskFreeSpaceExA(), GetDriveTypeA(), GetModuleHandleA(), GetModuleHandleExA(), GetTempFileNameA(), GetVolumeInformationA(), GetVolumeNameForVolumeMountPointA(), GetVolumePathNameA(), GetVolumePathNamesForVolumeNameA(), LoadLibraryExA(), RemoveDirectoryA(), SearchPathA(), SetCurrentDirectoryA(), and SetVolumeLabelA().

◆ BasepAnsiStringToHeapUnicodeString()

VOID WINAPI BasepAnsiStringToHeapUnicodeString ( IN LPCSTR  AnsiString,
OUT LPWSTR UnicodeString 
)

Definition at line 263 of file utils.c.

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 }
#define TRUE
Definition: types.h:120
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
smooth NULL
Definition: ftsmooth.c:416
void DPRINT(...)
Definition: polytest.cpp:61
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)

Referenced by CreateProcessInternalA().

◆ BasepAnsiStringToUnicodeSize()

ULONG NTAPI BasepAnsiStringToUnicodeSize ( IN PANSI_STRING  String)

Definition at line 56 of file utils.c.

57 {
59 }
static WCHAR String[]
Definition: stringtable.c:55
NTSYSAPI DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *)

Referenced by SetFileApisToANSI().

◆ BasepCheckWinSaferRestrictions()

NTSTATUS WINAPI BasepCheckWinSaferRestrictions ( IN HANDLE  UserToken,
IN LPWSTR  ApplicationName,
IN HANDLE  FileHandle,
OUT PBOOLEAN  InJob,
OUT PHANDLE  NewToken,
OUT PHANDLE  JobHandle 
)

Definition at line 909 of file utils.c.

915 {
917 
918  /* Validate that there's a name */
919  if ((ApplicationName) && *(ApplicationName))
920  {
921  /* Validate that the required output parameters are there */
922  if ((InJob) && (NewToken) && (JobHandle))
923  {
924  /* Do the work (one day...) */
925  DPRINT("BasepCheckWinSaferRestrictions is UNIMPLEMENTED\n");
927  }
928  else
929  {
930  /* Act as if SEH hit this */
932  }
933  }
934  else
935  {
936  /* Input is invalid */
938  }
939 
940  /* Return the status */
941  return Status;
942 }
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
LONG NTSTATUS
Definition: precomp.h:26
void DPRINT(...)
Definition: polytest.cpp:61
Status
Definition: gdiplustypes.h:24
PVOID PVOID PWCHAR ApplicationName
Definition: env.c:45
#define STATUS_ACCESS_VIOLATION
Definition: ntstatus.h:228
return STATUS_SUCCESS
Definition: btrfs.c:2725

Referenced by CreateProcessInternalW().

◆ BasepIsRealtimeAllowed()

PVOID WINAPI BasepIsRealtimeAllowed ( IN BOOLEAN  Keep)

Definition at line 653 of file utils.c.

654 {
656  PVOID State;
658 
660  if (!NT_SUCCESS(Status)) return NULL;
661 
662  if (!Keep)
663  {
665  State = (PVOID)TRUE;
666  }
667 
668  return State;
669 }
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
smooth NULL
Definition: ftsmooth.c:416
NTSYSAPI VOID NTAPI RtlReleasePrivilege(_In_ PVOID ReturnedState)
void * PVOID
Definition: retypes.h:9
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
BOOL Privilege(LPTSTR pszPrivilege, BOOL bEnable)
Definition: user_lib.cpp:531
#define SE_INC_BASE_PRIORITY_PRIVILEGE
Definition: security.c:668
Status
Definition: gdiplustypes.h:24
enum State_ State
Definition: pofuncs.h:54
NTSYSAPI NTSTATUS NTAPI RtlAcquirePrivilege(_In_ PULONG Privilege, _In_ ULONG NumPriv, _In_ ULONG Flags, _Out_ PVOID *ReturnedState)
unsigned int ULONG
Definition: retypes.h:1

Referenced by CreateProcessInternalW(), and SetPriorityClass().

◆ BasepLocateExeLdrEntry()

VOID NTAPI BasepLocateExeLdrEntry ( IN PLDR_DATA_TABLE_ENTRY  Entry,
IN PVOID  Context,
OUT BOOLEAN StopEnumeration 
)

Definition at line 156 of file utils.c.

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 }
#define TRUE
Definition: types.h:120
struct _Entry Entry
Definition: kefuncs.h:640
PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
Definition: proc.c:25
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
base of all file and directory entries
Definition: entries.h:82

Referenced by BasepComputeProcessPath(), and LoadLibraryExW().

◆ BasepMapFile()

NTSTATUS WINAPI BasepMapFile ( IN LPCWSTR  lpApplicationName,
OUT PHANDLE  hSection,
IN PUNICODE_STRING  ApplicationName 
)

Definition at line 676 of file utils.c.

679 {
680  RTL_RELATIVE_NAME_U RelativeName;
683  HANDLE hFile = NULL;
685 
686  DPRINT("BasepMapFile\n");
687 
688  /* Zero out the Relative Directory */
689  RelativeName.ContainingDirectory = NULL;
690 
691  /* Find the application name */
692  if (!RtlDosPathNameToNtPathName_U(lpApplicationName,
694  NULL,
695  &RelativeName))
696  {
698  }
699 
700  DPRINT("ApplicationName %wZ\n", ApplicationName);
701  DPRINT("RelativeName %wZ\n", &RelativeName.RelativeName);
702 
703  /* Did we get a relative name? */
704  if (RelativeName.RelativeName.Length)
705  {
706  ApplicationName = &RelativeName.RelativeName;
707  }
708 
709  /* Initialize the Object Attributes */
713  RelativeName.ContainingDirectory,
714  NULL);
715 
716  /* Try to open the executable */
720  &IoStatusBlock,
723  if (!NT_SUCCESS(Status))
724  {
725  DPRINT1("Failed to open file\n");
727  return Status;
728  }
729 
730  /* Create a section for this file */
733  NULL,
734  NULL,
735  PAGE_EXECUTE,
736  SEC_IMAGE,
737  hFile);
738  NtClose(hFile);
739 
740  /* Return status */
741  DPRINT("Section: %p for file: %p\n", *hSection, hFile);
742  return Status;
743 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
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:3371
HANDLE ContainingDirectory
Definition: rtltypes.h:1375
LONG NTSTATUS
Definition: precomp.h:26
#define FILE_SHARE_READ
Definition: compat.h:125
#define SECTION_ALL_ACCESS
Definition: nt_native.h:1293
#define FILE_READ_DATA
Definition: nt_native.h:628
smooth NULL
Definition: ftsmooth.c:416
#define PAGE_EXECUTE
Definition: nt_native.h:1306
void DPRINT(...)
Definition: polytest.cpp:61
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:166
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
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define STATUS_OBJECT_PATH_NOT_FOUND
Definition: udferr_usr.h:151
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
#define FILE_EXECUTE
Definition: nt_native.h:642
#define FILE_NON_DIRECTORY_FILE
Definition: constants.h:492
#define SYNCHRONIZE
Definition: nt_native.h:61
_In_ HANDLE hFile
Definition: mswsock.h:90
Status
Definition: gdiplustypes.h:24
PVOID PVOID PWCHAR ApplicationName
Definition: env.c:45
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#define DPRINT1
Definition: precomp.h:8
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
#define SEC_IMAGE
Definition: mmtypes.h:96
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
UNICODE_STRING RelativeName
Definition: rtltypes.h:1374
_In_ const BITMAPINFO _In_ UINT _In_opt_ HANDLE hSection
Definition: wingdi.h:3217
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)

◆ BasepOemStringToUnicodeSize()

ULONG NTAPI BasepOemStringToUnicodeSize ( IN PANSI_STRING  String)

Definition at line 42 of file utils.c.

43 {
45 }
static WCHAR String[]
Definition: stringtable.c:55
NTSYSAPI UINT WINAPI RtlOemStringToUnicodeSize(const STRING *)

Referenced by SetFileApisToOEM().

◆ BasepUnicodeStringToAnsiSize()

ULONG NTAPI BasepUnicodeStringToAnsiSize ( IN PUNICODE_STRING  String)

Definition at line 49 of file utils.c.

50 {
52 }
NTSYSAPI DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING *)
static WCHAR String[]
Definition: stringtable.c:55

Referenced by SetFileApisToANSI().

◆ BasepUnicodeStringToOemSize()

ULONG NTAPI BasepUnicodeStringToOemSize ( IN PUNICODE_STRING  String)

Definition at line 35 of file utils.c.

36 {
38 }
static WCHAR String[]
Definition: stringtable.c:55
NTSYSAPI DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING *)

Referenced by SetFileApisToOEM().

◆ SetFileApisToANSI()

VOID WINAPI SetFileApisToANSI ( VOID  )

Definition at line 837 of file utils.c.

838 {
839  /* Set the correct Base Api */
844 
845  /* FIXME: Old, deprecated way */
847 }
#define TRUE
Definition: types.h:120
BOOL bIsFileApiAnsi
Definition: utils.c:25
PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
Definition: utils.c:27
ULONG NTAPI BasepAnsiStringToUnicodeSize(IN PANSI_STRING String)
Definition: utils.c:56
PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
Definition: utils.c:29
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
ULONG NTAPI BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String)
Definition: utils.c:49
PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
Definition: utils.c:28
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
Definition: utils.c:26

◆ SetFileApisToOEM()

VOID WINAPI SetFileApisToOEM ( VOID  )

Definition at line 819 of file utils.c.

820 {
821  /* Set the correct Base Api */
826 
827  /* FIXME: Old, deprecated way */
829 }
BOOL bIsFileApiAnsi
Definition: utils.c:25
PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
Definition: utils.c:27
NTSTATUS(NTAPI * PRTL_CONVERT_STRING)(IN PUNICODE_STRING UnicodeString, IN PANSI_STRING AnsiString, IN BOOLEAN AllocateMemory)
Definition: kernel32.h:270
PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
Definition: utils.c:29
ULONG NTAPI BasepUnicodeStringToOemSize(IN PUNICODE_STRING String)
Definition: utils.c:35
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToOemString(POEM_STRING DestinationString, PCUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI NTSTATUS NTAPI RtlOemStringToUnicodeString(PUNICODE_STRING DestinationString, PCOEM_STRING SourceString, BOOLEAN AllocateDestinationString)
PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
Definition: utils.c:28
ULONG NTAPI BasepOemStringToUnicodeSize(IN PANSI_STRING String)
Definition: utils.c:42
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
Definition: utils.c:26

Referenced by _tmain().

◆ Wow64DisableWow64FsRedirection()

BOOL WINAPI Wow64DisableWow64FsRedirection ( IN PVOID OldValue)

Definition at line 773 of file utils.c.

774 {
776  BOOL Result;
777 
779  if (NT_SUCCESS(Status))
780  {
781  Result = TRUE;
782  }
783  else
784  {
786  Result = FALSE;
787  }
788  return Result;
789 }
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
unsigned int BOOL
Definition: ntddk_ex.h:94
_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
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:166
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
Status
Definition: gdiplustypes.h:24
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirectionEx(IN PVOID Wow64FsEnableRedirection, OUT PVOID *OldFsRedirectionLevel)
Definition: libsupp.c:971

Referenced by get_systemdirectory(), and run_winemenubuilder().

◆ Wow64EnableWow64FsRedirection()

BOOLEAN WINAPI Wow64EnableWow64FsRedirection ( IN BOOLEAN  Wow64EnableWow64FsRedirection)

Definition at line 750 of file utils.c.

751 {
753  BOOL Result;
754 
756  if (NT_SUCCESS(Status))
757  {
758  Result = TRUE;
759  }
760  else
761  {
763  Result = FALSE;
764  }
765  return Result;
766 }
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirection(IN BOOLEAN Wow64FsEnableRedirection)
Definition: libsupp.c:959
unsigned int BOOL
Definition: ntddk_ex.h:94
_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
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:166
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
BOOLEAN WINAPI Wow64EnableWow64FsRedirection(IN BOOLEAN Wow64EnableWow64FsRedirection)
Definition: utils.c:750
Status
Definition: gdiplustypes.h:24

◆ Wow64RevertWow64FsRedirection()

BOOL WINAPI Wow64RevertWow64FsRedirection ( IN PVOID  OldValue)

Definition at line 796 of file utils.c.

797 {
799  BOOL Result;
800 
801  Status = RtlWow64EnableFsRedirectionEx(OldValue, &OldValue);
802  if (NT_SUCCESS(Status))
803  {
804  Result = TRUE;
805  }
806  else
807  {
809  Result = FALSE;
810  }
811  return Result;
812 }
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
unsigned int BOOL
Definition: ntddk_ex.h:94
_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
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:166
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
Status
Definition: gdiplustypes.h:24
NTSYSAPI NTSTATUS NTAPI RtlWow64EnableFsRedirectionEx(IN PVOID Wow64FsEnableRedirection, OUT PVOID *OldFsRedirectionLevel)
Definition: libsupp.c:971

Referenced by get_systemdirectory(), and run_winemenubuilder().

Variable Documentation

◆ Basep8BitStringToUnicodeSize

PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize = BasepAnsiStringToUnicodeSize

Definition at line 29 of file utils.c.

Referenced by SetFileApisToANSI(), and SetFileApisToOEM().

◆ Basep8BitStringToUnicodeString

◆ BasepUnicodeStringTo8BitSize

PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize = BasepUnicodeStringToAnsiSize

Definition at line 28 of file utils.c.

Referenced by GetDllDirectoryA(), SetFileApisToANSI(), and SetFileApisToOEM().

◆ BasepUnicodeStringTo8BitString

◆ bIsFileApiAnsi

◆ Restricted

UNICODE_STRING Restricted = RTL_CONSTANT_STRING(L"Restricted")

Definition at line 24 of file utils.c.

Referenced by BaseGetNamedObjectDirectory(), SepCompareTokens(), and SepSidInTokenEx().