/* * @implemented */ BOOL WINAPI RegisterLogonProcess(DWORD dwProcessId, BOOL bRegister) { gfLogonProcess = NtUserxRegisterLogonProcess(dwProcessId, bRegister); if (gfLogonProcess) { USER_API_MESSAGE ApiMessage; PUSER_REGISTER_LOGON_PROCESS RegisterLogonProcessRequest = &ApiMessage.Data.RegisterLogonProcessRequest; RegisterLogonProcessRequest->ProcessId = dwProcessId; RegisterLogonProcessRequest->Register = bRegister; CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(USERSRV_SERVERDLL_INDEX, UserpRegisterLogonProcess), sizeof(*RegisterLogonProcessRequest)); if (!NT_SUCCESS(ApiMessage.Status)) { ERR("Failed to register logon process with CSRSS\n"); UserSetLastNTError(ApiMessage.Status); } } return gfLogonProcess; }
NTSTATUS CsrSetPriorityClass( IN HANDLE ProcessHandle, IN OUT PULONG PriorityClass ) { NTSTATUS Status; CSR_API_MSG m; PCSR_SETPRIORITY_CLASS_MSG a = &m.u.PriorityClass; a->ProcessHandle = ProcessHandle; a->PriorityClass = *PriorityClass; Status = CsrClientCallServer( &m, NULL, CSR_MAKE_API_NUMBER( CSRSRV_SERVERDLL_INDEX, CsrpSetPriorityClass ), sizeof( *a ) ); if ( *PriorityClass == 0 ) { *PriorityClass = a->PriorityClass; } return Status; }
BOOL APIENTRY SetConsolePaletteInternal( IN HANDLE hConsoleOutput, IN HPALETTE hPalette, IN UINT dwUsage ) { CONSOLE_API_MSG m; PCONSOLE_SETPALETTE_MSG a = &m.u.SetConsolePalette; NTSTATUS Status; a->ConsoleHandle = GET_CONSOLE_HANDLE; a->OutputHandle = hConsoleOutput; a->hPalette = hPalette; a->dwUsage = dwUsage; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepSetPalette ), sizeof( *a ) ); if (!NT_SUCCESS( m.ReturnValue)) { SET_LAST_NT_ERROR(m.ReturnValue); return FALSE; } else { return TRUE; } }
/* * @implemented */ DWORD WINAPI GetConsoleAliasExesLengthW(VOID) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_GETALIASESEXESLENGTH GetAliasesExesLengthRequest = &ApiMessage.Data.GetAliasesExesLengthRequest; DPRINT("GetConsoleAliasExesLengthW entered\n"); GetAliasesExesLengthRequest->Length = 0; Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetAliasExesLength), sizeof(CONSOLE_GETALIASESEXESLENGTH)); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return 0; } return GetAliasesExesLengthRequest->Length; }
BOOL WINAPI BaseCheckForVDM(IN HANDLE ProcessHandle, OUT LPDWORD ExitCode) { #if 0 // Unimplemented in BASESRV NTSTATUS Status; EVENT_BASIC_INFORMATION EventBasicInfo; BASE_API_MESSAGE ApiMessage; PBASE_GET_VDM_EXIT_CODE GetVdmExitCode = &ApiMessage.Data.GetVdmExitCode; /* It's VDM if the process is actually a wait handle (an event) */ Status = NtQueryEvent(ProcessHandle, EventBasicInformation, &EventBasicInfo, sizeof(EventBasicInfo), NULL); if (!NT_SUCCESS(Status)) return FALSE; /* Setup the input parameters */ GetVdmExitCode->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; GetVdmExitCode->hParent = ProcessHandle; /* Call CSRSS */ Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepGetVDMExitCode), sizeof(BASE_GET_VDM_EXIT_CODE)); if (!NT_SUCCESS(Status)) return FALSE; /* Get the exit code from the reply */ *ExitCode = GetVdmExitCode->ExitCode; #endif return TRUE; }
VOID APIENTRY SetLastConsoleEventActiveInternal( VOID ) /*++ Routine Description: Sends a ConsolepNotifyLastClose command to the server. Arguments: none. Return Value: None. --*/ { CONSOLE_API_MSG m; PCONSOLE_NOTIFYLASTCLOSE_MSG a = &m.u.SetLastConsoleEventActive; a->ConsoleHandle = GET_CONSOLE_HANDLE; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepNotifyLastClose ), sizeof( *a ) ); }
/* * @implemented */ BOOL WINAPI SetConsoleHistoryInfo(IN PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_GETSETHISTORYINFO HistoryInfoRequest = &ApiMessage.Data.HistoryInfoRequest; if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO)) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } HistoryInfoRequest->HistoryBufferSize = lpConsoleHistoryInfo->HistoryBufferSize; HistoryInfoRequest->NumberOfHistoryBuffers = lpConsoleHistoryInfo->NumberOfHistoryBuffers; HistoryInfoRequest->dwFlags = lpConsoleHistoryInfo->dwFlags; Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetHistory), sizeof(CONSOLE_GETSETHISTORYINFO)); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return FALSE; } return TRUE; }
static DWORD IntGetConsoleCommandHistory(LPVOID lpHistory, DWORD cbHistory, LPCVOID lpExeName, BOOLEAN bUnicode) { CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_GETCOMMANDHISTORY GetCommandHistoryRequest = &ApiMessage.Data.GetCommandHistoryRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; USHORT NumChars = (USHORT)(lpExeName ? (bUnicode ? wcslen(lpExeName) : strlen(lpExeName)) : 0); if (lpExeName == NULL || NumChars == 0) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } GetCommandHistoryRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; GetCommandHistoryRequest->HistoryLength = cbHistory; GetCommandHistoryRequest->ExeLength = NumChars * (bUnicode ? sizeof(WCHAR) : sizeof(CHAR)); GetCommandHistoryRequest->Unicode = GetCommandHistoryRequest->Unicode2 = bUnicode; // CaptureBuffer = CsrAllocateCaptureBuffer(2, IntStringSize(lpExeName, bUnicode) + // HistoryLength); CaptureBuffer = CsrAllocateCaptureBuffer(2, GetCommandHistoryRequest->ExeLength + GetCommandHistoryRequest->HistoryLength); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpExeName, GetCommandHistoryRequest->ExeLength, (PVOID)&GetCommandHistoryRequest->ExeName); CsrAllocateMessagePointer(CaptureBuffer, GetCommandHistoryRequest->HistoryLength, (PVOID*)&GetCommandHistoryRequest->History); CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCommandHistory), sizeof(*GetCommandHistoryRequest)); if (!NT_SUCCESS(ApiMessage.Status)) { CsrFreeCaptureBuffer(CaptureBuffer); BaseSetLastNTError(ApiMessage.Status); return 0; } RtlCopyMemory(lpHistory, GetCommandHistoryRequest->History, GetCommandHistoryRequest->HistoryLength); CsrFreeCaptureBuffer(CaptureBuffer); return GetCommandHistoryRequest->HistoryLength; }
BOOL APIENTRY SetConsoleHardwareState( IN HANDLE hConsoleOutput, IN COORD dwResolution, IN COORD dwFontSize ) /*++ Description: This routine set the video resolution and font. Parameters: hConsoleOutput - Supplies a console output handle. dwResolution - Contains screen resolution to set. Resolution is returned in pixels. dwFontSize - Contains font size to set. Font size is returned in pixels. Return value: TRUE - The operation was successful. FALSE/NULL - The operation failed. Extended error status is available using GetLastError. --*/ { CONSOLE_API_MSG m; PCONSOLE_SETHARDWARESTATE_MSG a = &m.u.SetConsoleHardwareState; a->ConsoleHandle = GET_CONSOLE_HANDLE; a->OutputHandle = hConsoleOutput; a->Resolution = dwResolution; a->FontSize = dwFontSize; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepSetHardwareState ), sizeof( *a ) ); if (!NT_SUCCESS( m.ReturnValue)) { SET_LAST_NT_ERROR(m.ReturnValue); return FALSE; } else { return TRUE; } }
static BOOL IntSetConsoleNumberOfCommands(DWORD dwNumCommands, LPCVOID lpExeName, BOOLEAN bUnicode) { CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest = &ApiMessage.Data.SetHistoryNumberCommandsRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; USHORT NumChars = (USHORT)(lpExeName ? (bUnicode ? wcslen(lpExeName) : strlen(lpExeName)) : 0); if (lpExeName == NULL || NumChars == 0) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } SetHistoryNumberCommandsRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; SetHistoryNumberCommandsRequest->NumCommands = dwNumCommands; SetHistoryNumberCommandsRequest->ExeLength = NumChars * (bUnicode ? sizeof(WCHAR) : sizeof(CHAR)); SetHistoryNumberCommandsRequest->Unicode = SetHistoryNumberCommandsRequest->Unicode2 = bUnicode; // CaptureBuffer = CsrAllocateCaptureBuffer(1, IntStringSize(lpExeName, bUnicode)); CaptureBuffer = CsrAllocateCaptureBuffer(1, SetHistoryNumberCommandsRequest->ExeLength); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } // IntCaptureMessageString(CaptureBuffer, lpExeName, bUnicode, // &SetHistoryNumberCommandsRequest->ExeName); CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpExeName, SetHistoryNumberCommandsRequest->ExeLength, (PVOID)&SetHistoryNumberCommandsRequest->ExeName); CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetNumberOfCommands), sizeof(*SetHistoryNumberCommandsRequest)); CsrFreeCaptureBuffer(CaptureBuffer); if (!NT_SUCCESS(ApiMessage.Status)) { BaseSetLastNTError(ApiMessage.Status); return FALSE; } return TRUE; }
BOOL APIENTRY GetConsoleDisplayMode( OUT LPDWORD lpModeFlags ) /*++ Description: This routine returns the display mode of the console. Parameters: lpModeFlags - pointer to store display mode in. Return value: TRUE - The operation was successful. FALSE/NULL - The operation failed. Extended error status is available using GetLastError. --*/ { CONSOLE_API_MSG m; PCONSOLE_GETDISPLAYMODE_MSG a = &m.u.GetConsoleDisplayMode; a->ConsoleHandle = GET_CONSOLE_HANDLE; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepGetDisplayMode ), sizeof( *a ) ); if (!NT_SUCCESS( m.ReturnValue)) { SET_LAST_NT_ERROR(m.ReturnValue); return FALSE; } else { try { *lpModeFlags = a->ModeFlags; } except( EXCEPTION_EXECUTE_HANDLER ) { SET_LAST_ERROR(ERROR_INVALID_ACCESS); return FALSE; } return TRUE; } }
BOOL WINAPI SetConsoleCursor( IN HANDLE hConsoleOutput, IN HCURSOR hCursor ) /*++ Description: Sets the mouse pointer for the specified screen buffer. Parameters: hConsoleOutput - Supplies a console output handle. hCursor - win32 cursor handle, should be NULL to set the default cursor. Return value: TRUE - The operation was successful. FALSE/NULL - The operation failed. Extended error status is available using GetLastError. --*/ { CONSOLE_API_MSG m; PCONSOLE_SETCURSOR_MSG a = &m.u.SetConsoleCursor; a->ConsoleHandle = GET_CONSOLE_HANDLE; a->OutputHandle = hConsoleOutput; a->CursorHandle = hCursor; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepSetCursor ), sizeof( *a ) ); if (!NT_SUCCESS( m.ReturnValue)) { SET_LAST_NT_ERROR(m.ReturnValue); return FALSE; } else { return TRUE; } }
/* * Helper function used by SetWindowStationUser (see winsta.c) */ VOID FASTCALL Logon(BOOL IsLogon) { USER_API_MESSAGE ApiMessage; PUSER_LOGON LogonRequest = &ApiMessage.Data.LogonRequest; LogonRequest->IsLogon = IsLogon; CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(USERSRV_SERVERDLL_INDEX, UserpLogon), sizeof(*LogonRequest)); }
HMENU APIENTRY ConsoleMenuControl( IN HANDLE hConsoleOutput, IN UINT dwCommandIdLow, IN UINT dwCommandIdHigh ) /*++ Description: Sets the command id range for the current screen buffer and returns the menu handle. Parameters: hConsoleOutput - Supplies a console output handle. dwCommandIdLow - Specifies the lowest command id to store in the input buffer. dwCommandIdHigh - Specifies the highest command id to store in the input buffer. Return value: TRUE - The operation was successful. FALSE/NULL - The operation failed. Extended error status is available using GetLastError. --*/ { CONSOLE_API_MSG m; PCONSOLE_MENUCONTROL_MSG a = &m.u.ConsoleMenuControl; a->ConsoleHandle = GET_CONSOLE_HANDLE; a->OutputHandle = hConsoleOutput; a->CommandIdLow =dwCommandIdLow; a->CommandIdHigh = dwCommandIdHigh; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepMenuControl ), sizeof( *a ) ); return a->hMenu; }
/* * @implemented */ DWORD WINAPI GetConsoleAliasesLengthW(LPWSTR lpExeName) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_GETALLALIASESLENGTH GetAllAliasesLengthRequest = &ApiMessage.Data.GetAllAliasesLengthRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; DPRINT("GetConsoleAliasesLengthW entered\n"); if (lpExeName == NULL) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } GetAllAliasesLengthRequest->ExeLength = (wcslen(lpExeName) + 1) * sizeof(WCHAR); GetAllAliasesLengthRequest->Length = 0; /* Allocate a Capture Buffer */ CaptureBuffer = CsrAllocateCaptureBuffer(1, GetAllAliasesLengthRequest->ExeLength); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } /* Capture the exe name */ CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpExeName, GetAllAliasesLengthRequest->ExeLength, (PVOID)&GetAllAliasesLengthRequest->ExeName); Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetAliasesLength), sizeof(CONSOLE_GETALLALIASESLENGTH)); CsrFreeCaptureBuffer(CaptureBuffer); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return 0; } return GetAllAliasesLengthRequest->Length; }
/* * @implemented */ DWORD WINAPI GetConsoleAliasExesW(LPWSTR lpExeNameBuffer, DWORD ExeNameBufferLength) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_GETALIASESEXES GetAliasesExesRequest = &ApiMessage.Data.GetAliasesExesRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; DPRINT("GetConsoleAliasExesW entered\n"); /* Allocate a Capture Buffer */ CaptureBuffer = CsrAllocateCaptureBuffer(1, ExeNameBufferLength); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } GetAliasesExesRequest->Length = ExeNameBufferLength; /* Allocate space for the exe name buffer */ CsrAllocateMessagePointer(CaptureBuffer, ExeNameBufferLength, (PVOID*)&GetAliasesExesRequest->ExeNames); Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetAliasExes), sizeof(CONSOLE_GETALIASESEXES)); if (!NT_SUCCESS(Status)) { CsrFreeCaptureBuffer(CaptureBuffer); BaseSetLastNTError(Status); return 0; } /* Copy the returned target string into the user buffer */ memcpy(lpExeNameBuffer, GetAliasesExesRequest->ExeNames, GetAliasesExesRequest->Length); /* Release the capture buffer and exit */ CsrFreeCaptureBuffer(CaptureBuffer); return GetAliasesExesRequest->Length; }
BOOL APIENTRY SetConsoleMenuClose( IN BOOL bEnable ) /*++ Description: This routine returns the display mode of the console. Parameters: bEnable - if TRUE, close is enabled in the system menu. Return value: TRUE - The operation was successful. FALSE/NULL - The operation failed. Extended error status is available using GetLastError. --*/ { CONSOLE_API_MSG m; PCONSOLE_SETMENUCLOSE_MSG a = &m.u.SetConsoleMenuClose; a->ConsoleHandle = GET_CONSOLE_HANDLE; a->Enable = bEnable; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepSetMenuClose ), sizeof( *a ) ); if (!NT_SUCCESS( m.ReturnValue)) { SET_LAST_NT_ERROR(m.ReturnValue); return FALSE; } else { return TRUE; } }
static VOID IntExpungeConsoleCommandHistory(LPCVOID lpExeName, BOOLEAN bUnicode) { CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_EXPUNGECOMMANDHISTORY ExpungeCommandHistoryRequest = &ApiMessage.Data.ExpungeCommandHistoryRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; USHORT NumChars = (USHORT)(lpExeName ? (bUnicode ? wcslen(lpExeName) : strlen(lpExeName)) : 0); if (lpExeName == NULL || NumChars == 0) { SetLastError(ERROR_INVALID_PARAMETER); return; } ExpungeCommandHistoryRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; ExpungeCommandHistoryRequest->ExeLength = NumChars * (bUnicode ? sizeof(WCHAR) : sizeof(CHAR)); ExpungeCommandHistoryRequest->Unicode = ExpungeCommandHistoryRequest->Unicode2 = bUnicode; // CaptureBuffer = CsrAllocateCaptureBuffer(1, IntStringSize(lpExeName, bUnicode)); CaptureBuffer = CsrAllocateCaptureBuffer(1, ExpungeCommandHistoryRequest->ExeLength); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return; } // IntCaptureMessageString(CaptureBuffer, lpExeName, bUnicode, // &ExpungeCommandHistoryRequest->ExeName); CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpExeName, ExpungeCommandHistoryRequest->ExeLength, (PVOID)&ExpungeCommandHistoryRequest->ExeName); CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepExpungeCommandHistory), sizeof(*ExpungeCommandHistoryRequest)); CsrFreeCaptureBuffer(CaptureBuffer); if (!NT_SUCCESS(ApiMessage.Status)) BaseSetLastNTError(ApiMessage.Status); }
int WINAPI ShowConsoleCursor( IN HANDLE hConsoleOutput, IN BOOL bShow ) /*++ Description: Sets the mouse pointer visibility counter. If the counter is less than zero, the mouse pointer is not shown. Parameters: hOutput - Supplies a console output handle. bShow - if TRUE, the display count is to be increased. if FALSE, decreased. Return value: The return value specifies the new display count. --*/ { CONSOLE_API_MSG m; PCONSOLE_SHOWCURSOR_MSG a = &m.u.ShowConsoleCursor; a->ConsoleHandle = GET_CONSOLE_HANDLE; a->OutputHandle = hConsoleOutput; a->bShow = bShow; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepShowCursor ), sizeof( *a ) ); return a->DisplayCount; }
static BOOL IntSetConsoleNumberOfCommands(DWORD dwNumCommands, LPCVOID lpExeName, BOOL bUnicode) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest = &ApiMessage.Data.SetHistoryNumberCommandsRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; if (lpExeName == NULL || !(bUnicode ? *(PWCHAR)lpExeName : *(PCHAR)lpExeName)) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } CaptureBuffer = CsrAllocateCaptureBuffer(1, IntStringSize(lpExeName, bUnicode)); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } IntCaptureMessageString(CaptureBuffer, lpExeName, bUnicode, &SetHistoryNumberCommandsRequest->ExeName); SetHistoryNumberCommandsRequest->NumCommands = dwNumCommands; Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetNumberOfCommands), sizeof(CONSOLE_SETHISTORYNUMBERCOMMANDS)); CsrFreeCaptureBuffer(CaptureBuffer); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return FALSE; } return TRUE; }
NTSTATUS CsrIdentifyAlertableThread( VOID ) { NTSTATUS Status; CSR_API_MSG m; PCSR_IDENTIFY_ALERTABLE_MSG a = &m.u.IndentifyAlertable; a->ClientId = NtCurrentTeb()->ClientId; Status = CsrClientCallServer( &m, NULL, CSR_MAKE_API_NUMBER( CSRSRV_SERVERDLL_INDEX, CsrpIdentifyAlertable ), sizeof( *a ) ); return Status; }
/* * @implemented */ BOOL WINAPI RegisterServicesProcess(DWORD ServicesProcessId) { USER_API_MESSAGE ApiMessage; PUSER_REGISTER_SERVICES_PROCESS RegisterServicesProcessRequest = &ApiMessage.Data.RegisterServicesProcessRequest; RegisterServicesProcessRequest->ProcessId = ServicesProcessId; CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(USERSRV_SERVERDLL_INDEX, UserpRegisterServicesProcess), sizeof(*RegisterServicesProcessRequest)); if (!NT_SUCCESS(ApiMessage.Status)) { UserSetLastNTError(ApiMessage.Status); return FALSE; } return TRUE; }
static DWORD IntGetConsoleCommandHistoryLength(LPCVOID lpExeName, BOOL bUnicode) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_GETCOMMANDHISTORYLENGTH GetCommandHistoryLengthRequest = &ApiMessage.Data.GetCommandHistoryLengthRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; if (lpExeName == NULL || !(bUnicode ? *(PWCHAR)lpExeName : *(PCHAR)lpExeName)) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } CaptureBuffer = CsrAllocateCaptureBuffer(1, IntStringSize(lpExeName, bUnicode)); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } IntCaptureMessageString(CaptureBuffer, lpExeName, bUnicode, &GetCommandHistoryLengthRequest->ExeName); Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCommandHistoryLength), sizeof(CONSOLE_GETCOMMANDHISTORYLENGTH)); CsrFreeCaptureBuffer(CaptureBuffer); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return 0; } return GetCommandHistoryLengthRequest->Length; }
/* * @implemented */ BOOL WINAPI SetConsoleCommandHistoryMode(IN DWORD dwMode) { CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_SETHISTORYMODE SetHistoryModeRequest = &ApiMessage.Data.SetHistoryModeRequest; SetHistoryModeRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; SetHistoryModeRequest->Mode = dwMode; CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCommandHistoryMode), sizeof(*SetHistoryModeRequest)); if (!NT_SUCCESS(ApiMessage.Status)) { BaseSetLastNTError(ApiMessage.Status); return FALSE; } return TRUE; }
/* * @implemented */ HDESK WINAPI GetThreadDesktop( DWORD dwThreadId) { USER_API_MESSAGE ApiMessage; PUSER_GET_THREAD_CONSOLE_DESKTOP GetThreadConsoleDesktopRequest = &ApiMessage.Data.GetThreadConsoleDesktopRequest; GetThreadConsoleDesktopRequest->ThreadId = dwThreadId; CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(USERSRV_SERVERDLL_INDEX, UserpGetThreadConsoleDesktop), sizeof(*GetThreadConsoleDesktopRequest)); if (!NT_SUCCESS(ApiMessage.Status)) { UserSetLastNTError(ApiMessage.Status); return NULL; } return NtUserGetThreadDesktop(dwThreadId, (DWORD)GetThreadConsoleDesktopRequest->ConsoleDesktop); }
/* * @implemented */ DWORD WINAPI GetConsoleAliasW(LPWSTR lpSource, LPWSTR lpTargetBuffer, DWORD TargetBufferLength, LPWSTR lpExeName) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_ADDGETALIAS ConsoleAliasRequest = &ApiMessage.Data.ConsoleAliasRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; DPRINT("GetConsoleAliasW entered with lpSource %S lpExeName %S\n", lpSource, lpExeName); if (lpTargetBuffer == NULL) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } /* Determine the needed sizes */ ConsoleAliasRequest->SourceLength = (wcslen(lpSource ) + 1) * sizeof(WCHAR); ConsoleAliasRequest->ExeLength = (wcslen(lpExeName) + 1) * sizeof(WCHAR); ConsoleAliasRequest->Target = NULL; ConsoleAliasRequest->TargetLength = TargetBufferLength; /* Allocate a Capture Buffer */ CaptureBuffer = CsrAllocateCaptureBuffer(3, ConsoleAliasRequest->SourceLength + ConsoleAliasRequest->ExeLength + ConsoleAliasRequest->TargetLength); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } /* Capture the strings */ CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpSource, ConsoleAliasRequest->SourceLength, (PVOID*)&ConsoleAliasRequest->Source); CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpExeName, ConsoleAliasRequest->ExeLength, (PVOID*)&ConsoleAliasRequest->Exe); /* Allocate space for the target buffer */ CsrAllocateMessagePointer(CaptureBuffer, ConsoleAliasRequest->TargetLength, (PVOID*)&ConsoleAliasRequest->Target); Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetAlias), sizeof(CONSOLE_ADDGETALIAS)); if (!NT_SUCCESS(Status)) { CsrFreeCaptureBuffer(CaptureBuffer); BaseSetLastNTError(Status); return 0; } /* Copy the returned target string into the user buffer */ // wcscpy(lpTargetBuffer, ConsoleAliasRequest->Target); memcpy(lpTargetBuffer, ConsoleAliasRequest->Target, ConsoleAliasRequest->TargetLength); /* Release the capture buffer and exit */ CsrFreeCaptureBuffer(CaptureBuffer); return ConsoleAliasRequest->TargetLength; }
BOOL WINAPI BaseUpdateVDMEntry(IN ULONG UpdateIndex, IN OUT PHANDLE WaitHandle, IN ULONG IndexInfo, IN ULONG BinaryType) { #if 0 // Unimplemented in BASESRV NTSTATUS Status; BASE_API_MESSAGE ApiMessage; PBASE_UPDATE_VDM_ENTRY UpdateVdmEntry = &ApiMessage.Data.UpdateVdmEntry; /* Check what update is being sent */ switch (UpdateIndex) { /* VDM is being undone */ case VdmEntryUndo: { /* Tell the server how far we had gotten along */ UpdateVdmEntry->iTask = HandleToUlong(*WaitHandle); UpdateVdmEntry->VDMCreationState = IndexInfo; break; } /* VDM is ready with a new process handle */ case VdmEntryUpdateProcess: { /* Send it the process handle */ UpdateVdmEntry->VDMProcessHandle = *WaitHandle; UpdateVdmEntry->iTask = IndexInfo; break; } } /* Also check what kind of binary this is for the console handle */ if (BinaryType == BINARY_TYPE_WOW) { /* Magic value for 16-bit apps */ UpdateVdmEntry->ConsoleHandle = (HANDLE)-1; } else if (UpdateVdmEntry->iTask) { /* No handle for true VDM */ UpdateVdmEntry->ConsoleHandle = NULL; } else { /* Otherwise, use the regular console handle */ UpdateVdmEntry->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; } /* Finally write the index and binary type */ UpdateVdmEntry->EntryIndex = UpdateIndex; UpdateVdmEntry->BinaryType = BinaryType; /* Send the message to CSRSS */ Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepUpdateVDMEntry), sizeof(BASE_UPDATE_VDM_ENTRY)); if (!NT_SUCCESS(Status)) { /* Handle failure */ BaseSetLastNTError(Status); return FALSE; } /* If this was an update, CSRSS returns a new wait handle */ if (UpdateIndex == VdmEntryUpdateProcess) { /* Return it to the caller */ *WaitHandle = UpdateVdmEntry->WaitObjectForParent; } #endif /* We made it */ return TRUE; }
/* * @implemented */ BOOL WINAPI AddConsoleAliasW(LPCWSTR lpSource, LPCWSTR lpTarget, LPCWSTR lpExeName) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_ADDGETALIAS ConsoleAliasRequest = &ApiMessage.Data.ConsoleAliasRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; ULONG CapturedStrings; DPRINT("AddConsoleAliasW enterd with lpSource %S lpTarget %S lpExeName %S\n", lpSource, lpTarget, lpExeName); /* Determine the needed sizes */ ConsoleAliasRequest->SourceLength = (wcslen(lpSource ) + 1) * sizeof(WCHAR); ConsoleAliasRequest->ExeLength = (wcslen(lpExeName) + 1) * sizeof(WCHAR); CapturedStrings = 2; if (lpTarget) /* The target can be optional */ { ConsoleAliasRequest->TargetLength = (wcslen(lpTarget) + 1) * sizeof(WCHAR); CapturedStrings++; } else { ConsoleAliasRequest->TargetLength = 0; } /* Allocate a Capture Buffer */ CaptureBuffer = CsrAllocateCaptureBuffer(CapturedStrings, ConsoleAliasRequest->SourceLength + ConsoleAliasRequest->ExeLength + ConsoleAliasRequest->TargetLength); if (CaptureBuffer == NULL) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } /* Capture the strings */ CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpSource, ConsoleAliasRequest->SourceLength, (PVOID*)&ConsoleAliasRequest->Source); CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpExeName, ConsoleAliasRequest->ExeLength, (PVOID*)&ConsoleAliasRequest->Exe); if (lpTarget) /* The target can be optional */ { CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)lpTarget, ConsoleAliasRequest->TargetLength, (PVOID*)&ConsoleAliasRequest->Target); } else { ConsoleAliasRequest->Target = NULL; } Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepAddAlias), sizeof(CONSOLE_ADDGETALIAS)); CsrFreeCaptureBuffer(CaptureBuffer); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return FALSE; } return TRUE; }
BOOL WINAPI GetConsoleMode( IN HANDLE hConsoleHandle, OUT LPDWORD lpMode ) /*++ Parameters: hConsoleHandle - Supplies a console input or output handle. lpMode - Supplies a pointer to a dword in which to store the mode. Input Mode Flags: ENABLE_LINE_INPUT - line oriented input is on. ENABLE_ECHO_INPUT - characters will be written to the screen as they are read. ENABLE_WINDOW_INPUT - the caller is windows-aware Output Mode Flags: ENABLE_LINE_OUTPUT - line oriented output is on. ENABLE_WRAP_AT_EOL_OUTPUT - the cursor will move to the beginning of the next line when the end of the row is reached. Return Value: TRUE - The operation was successful. FALSE/NULL - The operation failed. Extended error status is available using GetLastError. --*/ { CONSOLE_API_MSG m; PCONSOLE_MODE_MSG a = &m.u.GetConsoleMode; a->ConsoleHandle = GET_CONSOLE_HANDLE; a->Handle = hConsoleHandle; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, ConsolepGetMode ), sizeof( *a ) ); if (NT_SUCCESS( m.ReturnValue )) { try { *lpMode = a->Mode; } except( EXCEPTION_EXECUTE_HANDLER ) { SET_LAST_ERROR (ERROR_INVALID_ACCESS); return FALSE; } return TRUE; } else {
/* * @implemented */ DWORD WINAPI GetConsoleAliasesW(LPWSTR AliasBuffer, DWORD AliasBufferLength, LPWSTR ExeName) { NTSTATUS Status; CONSOLE_API_MESSAGE ApiMessage; PCONSOLE_GETALLALIASES GetAllAliasesRequest = &ApiMessage.Data.GetAllAliasesRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; DPRINT("GetConsoleAliasesW entered\n"); /* Determine the needed sizes */ GetAllAliasesRequest->ExeLength = GetConsoleAliasesLengthW(ExeName); if (GetAllAliasesRequest->ExeLength == 0 || GetAllAliasesRequest->ExeLength > AliasBufferLength) { return 0; } GetAllAliasesRequest->AliasesBufferLength = AliasBufferLength; /* Allocate a Capture Buffer */ CaptureBuffer = CsrAllocateCaptureBuffer(2, GetAllAliasesRequest->ExeLength + GetAllAliasesRequest->AliasesBufferLength); if (!CaptureBuffer) { DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } /* Capture the exe name and allocate space for the aliases buffer */ CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)ExeName, GetAllAliasesRequest->ExeLength, (PVOID*)&GetAllAliasesRequest->ExeName); CsrAllocateMessagePointer(CaptureBuffer, GetAllAliasesRequest->AliasesBufferLength, (PVOID*)&GetAllAliasesRequest->AliasesBuffer); Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetAliases), sizeof(CONSOLE_GETALLALIASES)); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return 0; } /* Copy the returned aliases string into the user buffer */ // wcscpy(AliasBuffer, GetAllAliasesRequest->AliasesBuffer); memcpy(AliasBuffer, GetAllAliasesRequest->AliasesBuffer, GetAllAliasesRequest->AliasesBufferLength); /* Release the capture buffer and exit */ CsrFreeCaptureBuffer(CaptureBuffer); return GetAllAliasesRequest->AliasesBufferLength; // / sizeof(WCHAR); (original code) }