Fixed some bugs in CreateProcessA which was introduced by r16730.
Modified: trunk/reactos/lib/kernel32/include/kernel32.h
Modified: trunk/reactos/lib/kernel32/misc/utils.c
Modified: trunk/reactos/lib/kernel32/process/create.c
_____
Modified: trunk/reactos/lib/kernel32/include/kernel32.h
--- trunk/reactos/lib/kernel32/include/kernel32.h 2005-07-29
20:24:48 UTC (rev 16880)
+++ trunk/reactos/lib/kernel32/include/kernel32.h 2005-07-29
21:55:09 UTC (rev 16881)
@@ -134,7 +134,7 @@
VOID
STDCALL
BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString,
- IN PVOID UnicodeString);
+ OUT LPWSTR* UnicodeString);
PUNICODE_STRING
STDCALL
@@ -145,11 +145,16 @@
Basep8BitStringToLiveUnicodeString(OUT PUNICODE_STRING UnicodeString,
IN LPCSTR String);
+NTSTATUS
+STDCALL
+Basep8BitStringToHeapUnicodeString(OUT PUNICODE_STRING UnicodeString,
+ IN LPCSTR String);
+
typedef NTSTATUS (STDCALL *PRTL_CONVERT_STRING)(IN PUNICODE_STRING
UnicodeString,
IN PANSI_STRING
AnsiString,
IN BOOLEAN
AllocateMemory);
-PRTL_CONVERT_STRING Basep8BitStringToUnicodeString;
+extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString;
NTSTATUS
STDCALL
_____
Modified: trunk/reactos/lib/kernel32/misc/utils.c
--- trunk/reactos/lib/kernel32/misc/utils.c 2005-07-29 20:24:48 UTC
(rev 16880)
+++ trunk/reactos/lib/kernel32/misc/utils.c 2005-07-29 21:55:09 UTC
(rev 16881)
@@ -73,13 +73,38 @@
return StaticString;
}
+NTSTATUS
+STDCALL
+Basep8BitStringToHeapUnicodeString(OUT PUNICODE_STRING UnicodeString,
+ IN LPCSTR String)
+{
+ ANSI_STRING AnsiString;
+ NTSTATUS Status;
+
+ DPRINT("Basep8BitStringToCachedUnicodeString\n");
+
+ /* Initialize an ANSI String */
+ RtlInitAnsiString(&AnsiString, String);
+
+ /* Convert it */
+ Status = Basep8BitStringToUnicodeString(UnicodeString, &AnsiString,
TRUE);
+
+ /* Handle failure */
+ /* Return Status */
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastErrorByStatus(Status);
+ }
+ return Status;
+}
+
/*
* Allocates space from the Heap and converts an Ansi String into it
*/
VOID
STDCALL
BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString,
- IN PVOID UnicodeString)
+ IN LPWSTR* UnicodeString)
{
ANSI_STRING AnsiTemp;
UNICODE_STRING UnicodeTemp;
@@ -93,12 +118,12 @@
UnicodeTemp.MaximumLength = RtlAnsiStringToUnicodeSize(&AnsiTemp);
/* Allocate space from the Heap for the string */
- UnicodeString = RtlAllocateHeap(GetProcessHeap(),
+ *UnicodeString = RtlAllocateHeap(GetProcessHeap(),
0,
UnicodeTemp.MaximumLength);
/* Save the buffer and convert */
- UnicodeTemp.Buffer = UnicodeString;
+ UnicodeTemp.Buffer = *UnicodeString;
RtlAnsiStringToUnicodeString(&UnicodeTemp, &AnsiTemp, FALSE);
}
_____
Modified: trunk/reactos/lib/kernel32/process/create.c
--- trunk/reactos/lib/kernel32/process/create.c 2005-07-29 20:24:48 UTC
(rev 16880)
+++ trunk/reactos/lib/kernel32/process/create.c 2005-07-29 21:55:09 UTC
(rev 16881)
@@ -639,7 +639,7 @@
else
{
/* Use a dynamic version */
- Basep8BitStringToLiveUnicodeString(&LiveCommandLine,
+ Basep8BitStringToHeapUnicodeString(&LiveCommandLine,
lpCommandLine);
}
}
@@ -652,12 +652,12 @@
/* Convert the Name and Directory */
if (lpApplicationName)
{
- Basep8BitStringToLiveUnicodeString(&ApplicationName,
+ Basep8BitStringToHeapUnicodeString(&ApplicationName,
lpApplicationName);
}
if (lpCurrentDirectory)
{
- Basep8BitStringToLiveUnicodeString(&CurrentDirectory,
+ Basep8BitStringToHeapUnicodeString(&CurrentDirectory,
lpCurrentDirectory);
}
@@ -741,11 +741,11 @@
PWCHAR Extension;
LPWSTR QuotedCmdLine = NULL;
LPWSTR ScanString;
- LPWSTR NullBuffer;
+ LPWSTR NullBuffer = NULL;
LPWSTR NameBuffer = NULL;
- WCHAR SaveChar;
+ WCHAR SaveChar = 0;
ULONG RetVal;
- UINT Error;
+ UINT Error = 0;
BOOLEAN SearchDone = FALSE;
CLIENT_ID ClientId;
PPEB OurPeb = NtCurrentPeb();
Show replies by date