ReactOS  0.4.14-dev-57-g333b8f1
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 (_In_ HANDLE hProcess, _In_opt_ SIZE_T StackCommit, _In_opt_ SIZE_T StackReserve, _Out_ 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 864 of file utils.c.

865 {
867 }
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 ( _In_ HANDLE  hProcess,
_In_opt_ SIZE_T  StackCommit,
_In_opt_ SIZE_T  StackReserve,
_Out_ PINITIAL_TEB  InitialTeb 
)

Definition at line 354 of file utils.c.

359 {
361  PIMAGE_NT_HEADERS Headers;
362  ULONG_PTR Stack;
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 }
#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
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
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
#define NtCurrentPeb()
Definition: FLS.c:20
#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
return STATUS_SUCCESS
Definition: btrfs.c:2966
#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:85
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 495 of file utils.c.

498 {
499  SIZE_T Dummy = 0;
500 
501  /* Free the Stack */
503  &InitialTeb->AllocatedStackBase,
504  &Dummy,
505  MEM_RELEASE);
506 }
_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:401
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:2014
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 513 of file utils.c.

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 
584  /* Setup the Initial Win32 Thread Context */
585  Context->Rax = (ULONG_PTR)StartAddress;
586  Context->Rbx = (ULONG_PTR)Parameter;
587  Context->Rsp = (ULONG_PTR)StackAddress;
588  /* The other registers are undefined */
589 
590  /* Setup the Segments */
591  Context->SegGs = KGDT64_R3_DATA | RPL_MASK;
592  Context->SegEs = KGDT64_R3_DATA | RPL_MASK;
593  Context->SegDs = KGDT64_R3_DATA | RPL_MASK;
594  Context->SegCs = KGDT64_R3_CODE | RPL_MASK;
595  Context->SegSs = KGDT64_R3_DATA | RPL_MASK;
596  Context->SegFs = KGDT64_R3_CMTEB | RPL_MASK;
597 
598  /* Set the EFLAGS */
599  Context->EFlags = 0x3000; /* IOPL 3 */
600 
601  if (ContextType == 1) /* For Threads */
602  {
604  }
605  else if (ContextType == 2) /* For Fibers */
606  {
607  Context->Rip = (ULONG_PTR)BaseFiberStartup;
608  }
609  else /* For first thread in a Process */
610  {
612  }
613 
614  /* Set the Context Flags */
615  Context->ContextFlags = CONTEXT_FULL;
616 
617  /* Give it some room for the Parameter */
618  Context->Rsp -= sizeof(PVOID);
619 #elif defined(_M_ARM)
620  DPRINT("BaseInitializeContext: %p\n", Context);
621 
622  // FIXME: check if this is correct!
623  /* Setup the Initial Win32 Thread Context */
624  Context->R0 = (ULONG_PTR)StartAddress;
625  Context->R1 = (ULONG_PTR)Parameter;
626  Context->Sp = (ULONG_PTR)StackAddress;
627 
628  if (ContextType == 1) /* For Threads */
629  {
631  }
632  else if (ContextType == 2) /* For Fibers */
633  {
634  Context->Pc = (ULONG_PTR)BaseFiberStartup;
635  }
636  else /* For first thread in a Process */
637  {
639  }
640 
641  /* Set the Context Flags */
642  Context->ContextFlags = CONTEXT_FULL;
643 
644  /* Give it some room for the Parameter */
645  Context->Sp -= sizeof(PVOID);
646 #else
647 #warning Unknown architecture
649  DbgBreakPoint();
650 #endif
651 }
#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:241
void DbgBreakPoint()
Definition: mach.c:553
#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:78
void * PVOID
Definition: retypes.h:9
#define KGDT_R3_TEB
Definition: ketypes.h:81
#define SharedUserData
#define CONTEXT_FLOATING_POINT
Definition: compat.h:267
#define KGDT_R3_CODE
Definition: ketypes.h:77
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 874 of file utils.c.

876 {
878  FILE_BASIC_INFORMATION FileBasicInfo;
879  FILE_DISPOSITION_INFORMATION FileDispositionInfo;
880 
881  /* If no attributes were given, get them */
882  if (!FileAttributes)
883  {
884  FileBasicInfo.FileAttributes = 0;
886  &IoStatusBlock,
887  &FileBasicInfo,
888  sizeof(FileBasicInfo),
890  FileAttributes = FileBasicInfo.FileAttributes;
891  }
892 
893  /* If file is marked as RO, reset its attributes */
895  {
896  RtlZeroMemory(&FileBasicInfo, sizeof(FileBasicInfo));
897  FileBasicInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL;
899  &IoStatusBlock,
900  &FileBasicInfo,
901  sizeof(FileBasicInfo),
903  }
904 
905  /* Finally, mark the file for deletion */
906  FileDispositionInfo.DeleteFile = TRUE;
908  &IoStatusBlock,
909  &FileDispositionInfo,
910  sizeof(FileDispositionInfo),
912 }
#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:3042

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 919 of file utils.c.

925 {
927 
928  /* Validate that there's a name */
929  if ((ApplicationName) && *(ApplicationName))
930  {
931  /* Validate that the required output parameters are there */
932  if ((InJob) && (NewToken) && (JobHandle))
933  {
934  /* Do the work (one day...) */
935  DPRINT("BasepCheckWinSaferRestrictions is UNIMPLEMENTED\n");
937  }
938  else
939  {
940  /* Act as if SEH hit this */
942  }
943  }
944  else
945  {
946  /* Input is invalid */
948  }
949 
950  /* Return the status */
951  return Status;
952 }
#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:2966

Referenced by CreateProcessInternalW().

◆ BasepIsRealtimeAllowed()

PVOID WINAPI BasepIsRealtimeAllowed ( IN BOOLEAN  Keep)

Definition at line 663 of file utils.c.

664 {
666  PVOID State;
668 
670  if (!NT_SUCCESS(Status)) return NULL;
671 
672  if (!Keep)
673  {
675  State = (PVOID)TRUE;
676  }
677 
678  return State;
679 }
#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 686 of file utils.c.

689 {
690  RTL_RELATIVE_NAME_U RelativeName;
693  HANDLE hFile = NULL;
695 
696  DPRINT("BasepMapFile\n");
697 
698  /* Zero out the Relative Directory */
699  RelativeName.ContainingDirectory = NULL;
700 
701  /* Find the application name */
702  if (!RtlDosPathNameToNtPathName_U(lpApplicationName,
704  NULL,
705  &RelativeName))
706  {
708  }
709 
710  DPRINT("ApplicationName %wZ\n", ApplicationName);
711  DPRINT("RelativeName %wZ\n", &RelativeName.RelativeName);
712 
713  /* Did we get a relative name? */
714  if (RelativeName.RelativeName.Length)
715  {
716  ApplicationName = &RelativeName.RelativeName;
717  }
718 
719  /* Initialize the Object Attributes */
723  RelativeName.ContainingDirectory,
724  NULL);
725 
726  /* Try to open the executable */
730  &IoStatusBlock,
733  if (!NT_SUCCESS(Status))
734  {
735  DPRINT1("Failed to open file\n");
737  return Status;
738  }
739 
740  /* Create a section for this file */
743  NULL,
744  NULL,
745  PAGE_EXECUTE,
746  SEC_IMAGE,
747  hFile);
748  NtClose(hFile);
749 
750  /* Return status */
751  DPRINT("Section: %p for file: %p\n", *hSection, hFile);
752  return Status;
753 }
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:3373
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:3234
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 847 of file utils.c.

848 {
849  /* Set the correct Base Api */
854 
855  /* FIXME: Old, deprecated way */
857 }
#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 829 of file utils.c.

830 {
831  /* Set the correct Base Api */
836 
837  /* FIXME: Old, deprecated way */
839 }
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:272
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 783 of file utils.c.

784 {
786  BOOL Result;
787 
789  if (NT_SUCCESS(Status))
790  {
791  Result = TRUE;
792  }
793  else
794  {
796  Result = FALSE;
797  }
798  return Result;
799 }
#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 760 of file utils.c.

761 {
763  BOOL Result;
764 
766  if (NT_SUCCESS(Status))
767  {
768  Result = TRUE;
769  }
770  else
771  {
773  Result = FALSE;
774  }
775  return Result;
776 }
#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:760
Status
Definition: gdiplustypes.h:24

◆ Wow64RevertWow64FsRedirection()

BOOL WINAPI Wow64RevertWow64FsRedirection ( IN PVOID  OldValue)

Definition at line 806 of file utils.c.

807 {
809  BOOL Result;
810 
811  Status = RtlWow64EnableFsRedirectionEx(OldValue, &OldValue);
812  if (NT_SUCCESS(Status))
813  {
814  Result = TRUE;
815  }
816  else
817  {
819  Result = FALSE;
820  }
821  return Result;
822 }
#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().