|
| WINPR_API BOOL | CreateProcessA (LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) |
| |
| WINPR_API BOOL | CreateProcessW (LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) |
| |
| WINPR_API BOOL | CreateProcessAsUserA (HANDLE hToken, LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) |
| |
| WINPR_API BOOL | CreateProcessAsUserW (HANDLE hToken, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) |
| |
| WINPR_API BOOL | CreateProcessWithLogonA (LPCSTR lpUsername, LPCSTR lpDomain, LPCSTR lpPassword, DWORD dwLogonFlags, LPCSTR lpApplicationName, LPSTR lpCommandLine, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) |
| |
| WINPR_API BOOL | CreateProcessWithLogonW (LPCWSTR lpUsername, LPCWSTR lpDomain, LPCWSTR lpPassword, DWORD dwLogonFlags, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) |
| |
| WINPR_API BOOL | CreateProcessWithTokenA (HANDLE hToken, DWORD dwLogonFlags, LPCSTR lpApplicationName, LPSTR lpCommandLine, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) |
| |
| WINPR_API BOOL | CreateProcessWithTokenW (HANDLE hToken, DWORD dwLogonFlags, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) |
| |
| DECLSPEC_NORETURN WINPR_API VOID | ExitProcess (UINT uExitCode) |
| |
| WINPR_API BOOL | GetExitCodeProcess (HANDLE hProcess, LPDWORD lpExitCode) |
| |
| WINPR_API HANDLE | _GetCurrentProcess (void) |
| |
| WINPR_API DWORD | GetCurrentProcessId (void) |
| |
| WINPR_API BOOL | TerminateProcess (HANDLE hProcess, UINT uExitCode) |
| |
| WINPR_API LPWSTR * | CommandLineToArgvW (LPCWSTR lpCmdLine, int *pNumArgs) |
| |
| WINPR_API BOOL | SetThreadPriority (HANDLE hThread, int nPriority) |
| |
| WINPR_API HANDLE | CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId) |
| |
| WINPR_API HANDLE | CreateRemoteThread (HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId) |
| |
| WINPR_API VOID | ExitThread (DWORD dwExitCode) |
| |
| WINPR_API BOOL | GetExitCodeThread (HANDLE hThread, LPDWORD lpExitCode) |
| |
| WINPR_API HANDLE | _GetCurrentThread (void) |
| |
| WINPR_API DWORD | GetCurrentThreadId (void) |
| |
| WINPR_API DWORD | QueueUserAPC (PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData) |
| |
| WINPR_API DWORD | ResumeThread (HANDLE hThread) |
| |
| WINPR_API DWORD | SuspendThread (HANDLE hThread) |
| |
| WINPR_API BOOL | SwitchToThread (void) |
| |
| WINPR_API BOOL | TerminateThread (HANDLE hThread, DWORD dwExitCode) |
| |
| WINPR_API DWORD | GetCurrentProcessorNumber (void) |
| |
| WINPR_API DWORD | TlsAlloc (void) |
| |
| WINPR_API LPVOID | TlsGetValue (DWORD dwTlsIndex) |
| |
| WINPR_API BOOL | TlsSetValue (DWORD dwTlsIndex, LPVOID lpTlsValue) |
| |
| WINPR_API BOOL | TlsFree (DWORD dwTlsIndex) |
| |
| WINPR_API LPSTR * | CommandLineToArgvA (LPCSTR lpCmdLine, int *pNumArgs) |
| |
| WINPR_API VOID | DumpThreadHandles (void) |
| |
| WINPR_API LPSTR* CommandLineToArgvA |
( |
LPCSTR |
lpCmdLine, |
|
|
int * |
pNumArgs |
|
) |
| |
CommandLineToArgvW function: http://msdn.microsoft.com/en-us/library/windows/desktop/bb776391/
CommandLineToArgvW has a special interpretation of backslash characters when they are followed by a quotation mark character ("), as follows:
2n backslashes followed by a quotation mark produce n backslashes followed by a quotation mark. (2n) + 1 backslashes followed by a quotation mark again produce n backslashes followed by a quotation mark. n backslashes not followed by a quotation mark simply produce n backslashes.
The address returned by CommandLineToArgvW is the address of the first element in an array of LPWSTR values; the number of pointers in this array is indicated by pNumArgs. Each pointer to a null-terminated Unicode string represents an individual argument found on the command line.
CommandLineToArgvW allocates a block of contiguous memory for pointers to the argument strings, and for the argument strings themselves; the calling application must free the memory used by the argument list when it is no longer needed. To free the memory, use a single call to the LocalFree function. Parsing C++ Command-Line Arguments: http://msdn.microsoft.com/en-us/library/windows/desktop/17w5ykft
Microsoft C/C++ startup code uses the following rules when interpreting arguments given on the operating system command line:
Arguments are delimited by white space, which is either a space or a tab.
The caret character (^) is not recognized as an escape character or delimiter. The character is handled completely by the command-line parser in the operating system before being passed to the argv array in the program.
A string surrounded by double quotation marks ("string") is interpreted as a single argument, regardless of white space contained within. A quoted string can be embedded in an argument.
A double quotation mark preceded by a backslash (") is interpreted as a literal double quotation mark character (").
Backslashes are interpreted literally, unless they immediately precede a double quotation mark.
If an even number of backslashes is followed by a double quotation mark, one backslash is placed in the argv array for every pair of backslashes, and the double quotation mark is interpreted as a string delimiter.
If an odd number of backslashes is followed by a double quotation mark, one backslash is placed in the argv array for every pair of backslashes, and the double quotation mark is "escaped" by the remaining backslash, causing a literal double quotation mark (") to be placed in argv.