Function CreateProcessW [src]

Prototype

pub fn CreateProcessW( lpApplicationName: ?LPCWSTR, lpCommandLine: ?LPWSTR, lpProcessAttributes: ?*SECURITY_ATTRIBUTES, lpThreadAttributes: ?*SECURITY_ATTRIBUTES, bInheritHandles: BOOL, dwCreationFlags: CreateProcessFlags, lpEnvironment: ?*anyopaque, lpCurrentDirectory: ?LPCWSTR, lpStartupInfo: *STARTUPINFOW, lpProcessInformation: *PROCESS_INFORMATION, ) CreateProcessError!void

Parameters

lpApplicationName: ?LPCWSTRlpCommandLine: ?LPWSTRlpProcessAttributes: ?*SECURITY_ATTRIBUTESlpThreadAttributes: ?*SECURITY_ATTRIBUTESbInheritHandles: BOOLdwCreationFlags: CreateProcessFlagslpEnvironment: ?*anyopaquelpCurrentDirectory: ?LPCWSTRlpStartupInfo: *STARTUPINFOWlpProcessInformation: *PROCESS_INFORMATION

Possible Errors

AccessDenied
FileNotFound
InvalidExe
InvalidName
NameTooLong
Unexpected

Source

pub fn CreateProcessW( lpApplicationName: ?LPCWSTR, lpCommandLine: ?LPWSTR, lpProcessAttributes: ?*SECURITY_ATTRIBUTES, lpThreadAttributes: ?*SECURITY_ATTRIBUTES, bInheritHandles: BOOL, dwCreationFlags: CreateProcessFlags, lpEnvironment: ?*anyopaque, lpCurrentDirectory: ?LPCWSTR, lpStartupInfo: *STARTUPINFOW, lpProcessInformation: *PROCESS_INFORMATION, ) CreateProcessError!void { if (kernel32.CreateProcessW( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation, ) == 0) { switch (GetLastError()) { .FILE_NOT_FOUND => return error.FileNotFound, .PATH_NOT_FOUND => return error.FileNotFound, .ACCESS_DENIED => return error.AccessDenied, .INVALID_PARAMETER => unreachable, .INVALID_NAME => return error.InvalidName, .FILENAME_EXCED_RANGE => return error.NameTooLong, // These are all the system errors that are mapped to ENOEXEC by // the undocumented _dosmaperr (old CRT) or __acrt_errno_map_os_error // (newer CRT) functions. Their code can be found in crt/src/dosmap.c (old SDK) // or urt/misc/errno.cpp (newer SDK) in the Windows SDK. .BAD_FORMAT, .INVALID_STARTING_CODESEG, // MIN_EXEC_ERROR in errno.cpp .INVALID_STACKSEG, .INVALID_MODULETYPE, .INVALID_EXE_SIGNATURE, .EXE_MARKED_INVALID, .BAD_EXE_FORMAT, .ITERATED_DATA_EXCEEDS_64k, .INVALID_MINALLOCSIZE, .DYNLINK_FROM_INVALID_RING, .IOPL_NOT_ENABLED, .INVALID_SEGDPL, .AUTODATASEG_EXCEEDS_64k, .RING2SEG_MUST_BE_MOVABLE, .RELOC_CHAIN_XEEDS_SEGLIM, .INFLOOP_IN_RELOC_CHAIN, // MAX_EXEC_ERROR in errno.cpp // This one is not mapped to ENOEXEC but it is possible, for example // when calling CreateProcessW on a plain text file with a .exe extension .EXE_MACHINE_TYPE_MISMATCH, => return error.InvalidExe, else => |err| return unexpectedError(err), } } }