Kernel Functions
This section details the core Kernel APIs, providing access to fundamental operating system services and objects.
Process and Thread Management
CreateProcess
BOOL CreateProcess(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
Creates a new process and its primary thread. The new process runs in the same address space of the calling process.
Parameters:
lpApplicationName
: The name of the module to be executed.lpCommandLine
: The command line for the process to be executed.lpProcessAttributes
: Security attributes for the process.lpThreadAttributes
: Security attributes for the primary thread.bInheritHandles
: Indicates whether the new process inherits handles.dwCreationFlags
: Flags that control the priority class and behavior of the new process.lpEnvironment
: Pointer to the environment block for the new process.lpCurrentDirectory
: Pointer to the full path of the current directory for the process.lpStartupInfo
: Pointer to a STARTUPINFO structure used for customizing.lpProcessInformation
: Pointer to a PROCESS_INFORMATION structure that receives.
Return Value:
TRUE
if the function succeeds.FALSE
if the function fails.
Remarks:
- Use VirtualAlloc to allocate memory for the command line if it's not already allocated.
- Consider using CreateProcessAsUser for processes that need to run under a different user account.
ExitProcess
VOID ExitProcess(
UINT uExitCode
);
Terminates the calling process and all of its threads.
Parameters:
uExitCode
: The exit code for the process.
Remarks:
- This function provides a clean exit by calling thread termination routines before terminating the process.
GetCurrentProcess
HANDLE GetCurrentProcess(
VOID
);
Returns a pseudo handle for the current process. A pseudo handle is a special constant that is equivalent to the actual handle of the process in all circumstances.
Return Value:
- The return value is the process handle.
GetCurrentThreadId
DWORD GetCurrentThreadId(
VOID
);
Retrieves the thread identifier of the calling thread.
Return Value:
- The return value is the thread identifier of the calling thread.
Memory Management
VirtualAlloc
LPVOID VirtualAlloc(
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
Reserves, commits, or changes the state of a region of pages in the virtual address space of the calling process.
Parameters:
lpAddress
: The starting address of the region to allocate.dwSize
: The size, in bytes, of the region of memory to allocate.flAllocationType
: The type of memory allocation operation.flProtect
: The memory protection for the region of pages to be allocated.
Return Value:
- If the function succeeds, the return value is the base address of the allocated region of pages.
- If the function fails, the return value is
NULL
.
Synchronization Objects
CreateMutex
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCSTR lpName
);
Creates or opens a mutex object.
Parameters:
lpMutexAttributes
: Security attributes for the mutex object.bInitialOwner
: If TRUE, the calling thread is granted initial ownership of the mutex object.lpName
: The name of the mutex object.
Return Value:
- If the function succeeds, the return value is a handle to the newly created mutex object.
- If the function fails, the return value is NULL.