-#ifndef _HELPER_H
-#define _HELPER_H
-
-#define ROUNDUP(a,b) ((((a)+(b)-1)/(b))*(b))
-#define ROUNDDOWN(a,b) (((a)/(b))*(b))
-#define ROUND_UP ROUNDUP
-#define ROUND_DOWN ROUNDDOWN
-#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~(PAGE_SIZE-1)))
-#define PAGE_ROUND_UP(x) ( (((ULONG)x)%PAGE_SIZE) ? ((((ULONG)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG)x) )
-#define ABS_VALUE(V) (((V) < 0) ? -(V) : (V))
-#define RtlRosMin(X,Y) (((X) < (Y))? (X) : (Y))
-#define RtlRosMin3(X,Y,Z) (((X) < (Y)) ? RtlRosMin(X,Z) : RtlRosMin(Y,Z))
-#define KEBUGCHECKEX(a,b,c,d,e) DbgPrint("KeBugCheckEx at %s:%i\n",__FILE__,__LINE__), KeBugCheckEx(a,b,c,d,e)
-#define KEBUGCHECK(a) DbgPrint("KeBugCheck at %s:%i\n",__FILE__,__LINE__), KeBugCheck(a)
-#define EXPORTED __declspec(dllexport)
-#define IMPORTED __declspec(dllimport)
-#define LIST_FOR_EACH(entry, head) \
- for(entry = (head)->Flink; entry != (head); entry = entry->Flink)
-#define LIST_FOR_EACH_SAFE(tmp_entry, head, ptr, type, field) \
- for ((tmp_entry)=(head)->Flink; (tmp_entry)!=(head) && \
- ((ptr) = CONTAINING_RECORD(tmp_entry,type,field)) && \
- ((tmp_entry) = (tmp_entry)->Flink); )
-#define OPTHDROFFSET(a) ((LPVOID)((BYTE *)a + \
- ((PIMAGE_DOS_HEADER)a)->e_lfanew + \
- sizeof (IMAGE_NT_SIGNATURE) + \
- sizeof (IMAGE_FILE_HEADER)))
-#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
-#define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m)))
-#define NTSTAT_SEVERITY_SHIFT 30
-#define NTSTAT_SEVERITY_MASK 0x00000003
-#define NTSTAT_FACILITY_SHIFT 16
-#define NTSTAT_FACILITY_MASK 0x00000FFF
-#define NTSTAT_CUSTOMER_MASK 0x20000000
-#define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)
-#define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)
-#define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)
-#define RELATIVE_TIME(wait) (-(wait))
-#define NANOS_TO_100NS(nanos) (((LONGLONG)(nanos)) / 100)
-#define MICROS_TO_100NS(micros) (((LONGLONG)(micros)) * NANOS_TO_100NS(1000))
-#define MILLIS_TO_100NS(milli) (((LONGLONG)(milli)) * MICROS_TO_100NS(1000))
-#define SECONDS_TO_100NS(seconds) (((LONGLONG)(seconds)) * MILLIS_TO_100NS(1000))
-#define MINUTES_TO_100NS(minutes) (((LONGLONG)(minutes)) * SECONDS_TO_100NS(60))
-#define HOURS_TO_100NS(hours) (((LONGLONG)(hours)) * MINUTES_TO_100NS(60))
+#ifndef _HELPER_H\r
+#define _HELPER_H\r
+ \r
+#define ROUNDUP(a,b) ((((a)+(b)-1)/(b))*(b))\r
+#define ROUNDDOWN(a,b) (((a)/(b))*(b))\r
+#define ROUND_UP ROUNDUP\r
+#define ROUND_DOWN ROUNDDOWN\r
+#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~(PAGE_SIZE-1)))\r
+#define PAGE_ROUND_UP(x) ( (((ULONG)x)%PAGE_SIZE) ? ((((ULONG)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG)x) )\r
+#define ABS_VALUE(V) (((V) < 0) ? -(V) : (V))\r
+#define RtlRosMin(X,Y) (((X) < (Y))? (X) : (Y))\r
+#define RtlRosMin3(X,Y,Z) (((X) < (Y)) ? RtlRosMin(X,Z) : RtlRosMin(Y,Z))\r
+#define KEBUGCHECKEX(a,b,c,d,e) DbgPrint("KeBugCheckEx at %s:%i\n",__FILE__,__LINE__), KeBugCheckEx(a,b,c,d,e)\r
+#define KEBUGCHECK(a) DbgPrint("KeBugCheck at %s:%i\n",__FILE__,__LINE__), KeBugCheck(a)\r
+#define EXPORTED __declspec(dllexport)\r
+#define IMPORTED __declspec(dllimport)\r
+#define LIST_FOR_EACH(entry, head) \\r
+ for(entry = (head)->Flink; entry != (head); entry = entry->Flink)\r
+#define LIST_FOR_EACH_SAFE(tmp_entry, head, ptr, type, field) \\r
+ for ((tmp_entry)=(head)->Flink; (tmp_entry)!=(head) && \\r
+ ((ptr) = CONTAINING_RECORD(tmp_entry,type,field)) && \\r
+ ((tmp_entry) = (tmp_entry)->Flink); )\r
+#define OPTHDROFFSET(a) ((LPVOID)((BYTE *)a + \\r
+ ((PIMAGE_DOS_HEADER)a)->e_lfanew + \\r
+ sizeof (IMAGE_NT_SIGNATURE) + \\r
+ sizeof (IMAGE_FILE_HEADER)))\r
+#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))\r
+#define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m)))\r
+#define NTSTAT_SEVERITY_SHIFT 30\r
+#define NTSTAT_SEVERITY_MASK 0x00000003\r
+#define NTSTAT_FACILITY_SHIFT 16\r
+#define NTSTAT_FACILITY_MASK 0x00000FFF\r
+#define NTSTAT_CUSTOMER_MASK 0x20000000\r
+#define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)\r
+#define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)\r
+#define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)\r
+#define RELATIVE_TIME(wait) (-(wait))\r
+#define NANOS_TO_100NS(nanos) (((LONGLONG)(nanos)) / 100)\r
+#define MICROS_TO_100NS(micros) (((LONGLONG)(micros)) * NANOS_TO_100NS(1000))\r
+#define MILLIS_TO_100NS(milli) (((LONGLONG)(milli)) * MICROS_TO_100NS(1000))\r
+#define SECONDS_TO_100NS(seconds) (((LONGLONG)(seconds)) * MILLIS_TO_100NS(1000))\r
+#define MINUTES_TO_100NS(minutes) (((LONGLONG)(minutes)) * SECONDS_TO_100NS(60))\r
+#define HOURS_TO_100NS(hours) (((LONGLONG)(hours)) * MINUTES_TO_100NS(60))\r
#define UNICODIZE1(x) L##x\r
-#define UNICODIZE(x) UNICODIZE1(x)
-#define InsertAscendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
-{\
- PLIST_ENTRY current;\
-\
- current = (ListHead)->Flink;\
- while (current != (ListHead))\
- {\
- if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >\
- (NewEntry)->SortField)\
- {\
- break;\
- }\
- current = current->Flink;\
- }\
-\
- InsertTailList(current, &((NewEntry)->ListEntryField));\
-}
-
-#define InsertDescendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
-{\
- PLIST_ENTRY current;\
-\
- current = (ListHead)->Flink;\
- while (current != (ListHead))\
- {\
- if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <\
- (NewEntry)->SortField)\
- {\
- break;\
- }\
- current = current->Flink;\
- }\
-\
- InsertTailList(current, &((NewEntry)->ListEntryField));\
-}
-
-#define InsertAscendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
-{\
- PLIST_ENTRY current;\
-\
- current = (ListHead)->Flink;\
- while (current != (ListHead))\
- {\
- if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\
- (NewEntry)->SortField)\
- {\
- break;\
- }\
- current = current->Flink;\
- }\
-\
- InsertTailList(current, &((NewEntry)->ListEntryField));\
-}
-
-#define InsertDescendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
-{\
- PLIST_ENTRY current;\
-\
- current = (ListHead)->Flink;\
- while (current != (ListHead))\
- {\
- if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\
- (NewEntry)->SortField)\
- {\
- break;\
- }\
- current = current->Flink;\
- }\
-\
- InsertTailList(current, &((NewEntry)->ListEntryField));\
-}
-
-#endif
+#define UNICODIZE(x) UNICODIZE1(x)\r
+#define InsertAscendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\\r
+{\\r
+ PLIST_ENTRY current;\\r
+\\r
+ current = (ListHead)->Flink;\\r
+ while (current != (ListHead))\\r
+ {\\r
+ if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >\\r
+ (NewEntry)->SortField)\\r
+ {\\r
+ break;\\r
+ }\\r
+ current = current->Flink;\\r
+ }\\r
+\\r
+ InsertTailList(current, &((NewEntry)->ListEntryField));\\r
+}\r
+\r
+#define InsertDescendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\\r
+{\\r
+ PLIST_ENTRY current;\\r
+\\r
+ current = (ListHead)->Flink;\\r
+ while (current != (ListHead))\\r
+ {\\r
+ if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <\\r
+ (NewEntry)->SortField)\\r
+ {\\r
+ break;\\r
+ }\\r
+ current = current->Flink;\\r
+ }\\r
+\\r
+ InsertTailList(current, &((NewEntry)->ListEntryField));\\r
+}\r
+\r
+#define InsertAscendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\\r
+{\\r
+ PLIST_ENTRY current;\\r
+\\r
+ current = (ListHead)->Flink;\\r
+ while (current != (ListHead))\\r
+ {\\r
+ if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\\r
+ (NewEntry)->SortField)\\r
+ {\\r
+ break;\\r
+ }\\r
+ current = current->Flink;\\r
+ }\\r
+\\r
+ InsertTailList(current, &((NewEntry)->ListEntryField));\\r
+}\r
+\r
+#define InsertDescendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\\r
+{\\r
+ PLIST_ENTRY current;\\r
+\\r
+ current = (ListHead)->Flink;\\r
+ while (current != (ListHead))\\r
+ {\\r
+ if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\\r
+ (NewEntry)->SortField)\\r
+ {\\r
+ break;\\r
+ }\\r
+ current = current->Flink;\\r
+ }\\r
+\\r
+ InsertTailList(current, &((NewEntry)->ListEntryField));\\r
+}\r
+\r
+#endif\r
#include <k32.h>
#define NDEBUG
-#include <debug.h>
+#include "../include/debug.h"
#define CMD_STRING L"cmd /c "
lpStartupInfo, lpProcessInformation);
/* Copy Startup Info */
- DPRINT("Foo\n");
RtlMoveMemory(&StartupInfo, lpStartupInfo, sizeof(*lpStartupInfo));
- DPRINT("Foo\n");
/* Initialize all strings to nothing */
LiveCommandLine.Buffer = NULL;
/* Convert the Command line */
if (lpCommandLine)
{
- DPRINT("Foo\n");
/* If it's too long, then we'll have a problem */
if ((strlen(lpCommandLine) + 1) * sizeof(WCHAR) <
NtCurrentTeb()->StaticUnicodeString.MaximumLength)
{
/* Cache it in the TEB */
- DPRINT("Foo\n");
CommandLine = Basep8BitStringToCachedUnicodeString(lpCommandLine);
}
else
{
/* Use a dynamic version */
- DPRINT("Foo\n");
Basep8BitStringToLiveUnicodeString(&LiveCommandLine,
lpCommandLine);
}
}
else
{
- DPRINT("Foo\n");
/* The logic below will use CommandLine, so we must make it valid */
CommandLine = &DummyString;
}
/* Convert the Name and Directory */
if (lpApplicationName)
{
- DPRINT("Foo\n");
Basep8BitStringToLiveUnicodeString(&ApplicationName,
lpApplicationName);
}
if (lpCurrentDirectory)
{
- DPRINT("Foo\n");
Basep8BitStringToLiveUnicodeString(&CurrentDirectory,
lpCurrentDirectory);
}
/* Now convert Startup Strings */
if (lpStartupInfo->lpReserved)
{
- DPRINT("Foo\n");
BasepAnsiStringToHeapUnicodeString(lpStartupInfo->lpReserved,
&StartupInfo.lpReserved);
}
if (lpStartupInfo->lpDesktop)
{
- DPRINT("Foo\n");
BasepAnsiStringToHeapUnicodeString(lpStartupInfo->lpDesktop,
&StartupInfo.lpDesktop);
}
if (lpStartupInfo->lpTitle)
{
- DPRINT("Foo\n");
BasepAnsiStringToHeapUnicodeString(lpStartupInfo->lpTitle,
&StartupInfo.lpTitle);
}
PROCESS_BASIC_INFORMATION ProcessBasicInfo;
STARTUPINFOW StartupInfo;
ULONG Dummy;
+ LPWSTR BatchCommandLine;
+ ULONG CmdLineLength;
+ UNICODE_STRING CommandLineString;
+ LPWSTR TempBuffer;
+ PWCHAR Extension;
LPWSTR QuotedCmdLine = NULL;
LPWSTR ScanString;
LPWSTR NullBuffer;
}
/* Fail on this flag, it's only valid with the WithLogonW function */
- if (dwCreationFlags & CREATE_WITH_USERPROFILE)
+ if (dwCreationFlags & CREATE_PRESERVE_CODE_AUTHZ_LEVEL)
{
DPRINT1("Invalid flag used\n");
SetLastError(ERROR_INVALID_PARAMETER);
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
- DPRINT("Foo\n");
+
/*
* We're going to modify and mask out flags and stuff in lpStartupInfo,
* so we'll use our own local copy for that.
*/
StartupInfo = *lpStartupInfo;
- DPRINT("Foo\n");
+
/* FIXME: Use default Separate/Shared VDM Flag */
/* If we are inside a Job, use Separate VDM so it won't escape the Job */
CREATE_SEPARATE_WOW_VDM;
}
}
- DPRINT("Foo\n");
+
/*
* According to some sites, ShellExecuteEx uses an undocumented flag to
* send private handle data (such as HMONITOR or HICON). See:
{
StartupInfo.dwFlags &= ~STARTF_USESTDHANDLES;
}
- DPRINT("Foo\n");
+
/* Start by zeroing out the fields */
RtlZeroMemory(lpProcessInformation, sizeof(PROCESS_INFORMATION));
- DPRINT("Foo\n");
+
/* Easy stuff first, convert the process priority class */
PriorityClass.Foreground = FALSE;
PriorityClass.PriorityClass = BasepConvertPriorityClass(dwCreationFlags);
- DPRINT("Foo\n");
+
/* Convert the environment */
if(lpEnvironment && !(dwCreationFlags & CREATE_UNICODE_ENVIRONMENT))
{
lpEnvironment = BasepConvertUnicodeEnvironment(lpEnvironment);
if (!lpEnvironment) return FALSE;
}
-DPRINT("Foo\n");
+
/* Get the application name and do all the proper formating necessary */
GetAppName:
/* See if we have an application name (oh please let us have one!) */
/* Advance past quote */
ScanString++;
lpApplicationName = ScanString;
- DPRINT("Foo\n");
+
/* Find the closing quote */
while (*ScanString)
{
FoundQuotes = TRUE;
break;
}
- DPRINT("Foo\n");
+
/* Keep looking */
ScanString++;
NullBuffer = ScanString;
WhiteScan:
/* Reset the pointer */
lpApplicationName = lpCommandLine;
- DPRINT("Foo\n");
+
/* Find whitespace of Tab */
while (*ScanString)
{
NullBuffer = ScanString;
break;
}
- DPRINT("Foo\n");
+
/* Keep looking */
ScanString++;
NullBuffer = ScanString;
case STATUS_INVALID_IMAGE_PROTECT:
case STATUS_INVALID_IMAGE_NOT_MZ:
- /* If it's a DOS app, use VDM */
- //if ((BasepCheckDosApp(&ApplicationName)))
+ /* If it's a DOS app, use VDM
+ if ((BasepCheckDosApp(&ApplicationName))) */
{
DPRINT1("Launching VDM...\n");
RtlFreeHeap(GetProcessHeap(), 0, NameBuffer);
}
/* It's a batch file */
- LPWSTR BatchCommandLine;
- ULONG CmdLineLength;
- UNICODE_STRING CommandLineString;
- LPWSTR TempBuffer;
- PWCHAR Extension =
- &ApplicationName.Buffer[ApplicationName.Length / sizeof(WCHAR) - 4];
+ Extension = &ApplicationName.Buffer[ApplicationName.Length /
+ sizeof(WCHAR) - 4];
/* Make sure the extensions are correct */
if (_wcsnicmp(Extension, L".bat", 4) && _wcsnicmp(Extension, L".cmd", 4))