Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

convdm.c File Reference

#include "precomp.h"

Go to the source code of this file.

Functions

BOOL APIENTRY VDMConsoleOperation (DWORD iFunction, LPVOID lpData)


Function Documentation

BOOL APIENTRY VDMConsoleOperation DWORD  iFunction,
LPVOID  lpData
 

Definition at line 26 of file convdm.c.

References _CONSOLE_VDM_MSG::Bool, _CONSOLE_VDM_MSG::ConsoleHandle, ConsolepVDMOperation, CsrAllocateCaptureBuffer(), CsrCaptureMessageBuffer(), CsrClientCallServer(), CsrFreeCaptureBuffer(), EXCEPTION_EXECUTE_HANDLER, FALSE, GET_CONSOLE_HANDLE, _CONSOLE_VDM_MSG::iFunction, NT_SUCCESS, NULL, _CONSOLE_VDM_MSG::Point, SET_LAST_ERROR, SET_LAST_NT_ERROR, TRUE, and _CONSOLE_API_MSG::u.

00033 : 00034 00035 iFunction - Function Index. 00036 VDM_HIDE_WINDOW 00037 00038 Return Value: 00039 00040 TRUE - The operation was successful. 00041 00042 FALSE/NULL - The operation failed. Extended error status is available 00043 using GetLastError. 00044 00045 00046 --*/ 00047 00048 { 00049 CONSOLE_API_MSG m; 00050 PCONSOLE_VDM_MSG a = &m.u.VDMConsoleOperation; 00051 LPRECT lpRect; 00052 LPPOINT lpPoint; 00053 PBOOL lpBool; 00054 PCSR_CAPTURE_HEADER CaptureBuffer = NULL; 00055 #if defined(FE_SB) 00056 #if defined(i386) 00057 LPVDM_IOCTL_PARAM lpIoctlParam; 00058 #endif 00059 #endif // FE_SB 00060 00061 a->ConsoleHandle = GET_CONSOLE_HANDLE; 00062 a->iFunction = iFunction; 00063 if (iFunction == VDM_CLIENT_TO_SCREEN || 00064 iFunction == VDM_SCREEN_TO_CLIENT) { 00065 lpPoint = (LPPOINT)lpData; 00066 a->Point = *lpPoint; 00067 } else if (iFunction == VDM_FULLSCREEN_NOPAINT) { 00068 a->Bool = (lpData != NULL); 00069 } 00070 #if defined(FE_SB) 00071 else if (iFunction == VDM_SET_VIDEO_MODE) { 00072 a->Bool = (lpData != NULL); 00073 } 00074 #if defined(i386) 00075 else if (iFunction == VDM_SAVE_RESTORE_HW_STATE) { 00076 a->Bool = (lpData != NULL); 00077 } 00078 else if (iFunction == VDM_VIDEO_IOCTL) { 00079 lpIoctlParam = (LPVDM_IOCTL_PARAM)lpData; 00080 a->VDMIoctlParam = *lpIoctlParam; 00081 if (lpIoctlParam->lpvInBuffer != NULL) { 00082 if (lpIoctlParam->lpvOutBuffer != NULL || lpIoctlParam->cbInBuffer == 0) { 00083 SET_LAST_ERROR(ERROR_INVALID_PARAMETER); 00084 return FALSE; 00085 } 00086 CaptureBuffer = CsrAllocateCaptureBuffer( 1, 00087 lpIoctlParam->cbInBuffer 00088 ); 00089 if (CaptureBuffer == NULL) { 00090 SET_LAST_ERROR(ERROR_NOT_ENOUGH_MEMORY); 00091 return FALSE; 00092 } 00093 CsrCaptureMessageBuffer( CaptureBuffer, 00094 (PCHAR) lpIoctlParam->lpvInBuffer, 00095 lpIoctlParam->cbInBuffer, 00096 (PVOID *) &a->VDMIoctlParam.lpvInBuffer 00097 ); 00098 } 00099 if (lpIoctlParam->lpvOutBuffer != NULL) { 00100 if (lpIoctlParam->cbOutBuffer == 0) { 00101 SET_LAST_ERROR(ERROR_INVALID_PARAMETER); 00102 return FALSE; 00103 } 00104 CaptureBuffer = CsrAllocateCaptureBuffer( 1, 00105 lpIoctlParam->cbOutBuffer 00106 ); 00107 if (CaptureBuffer == NULL) { 00108 SET_LAST_ERROR(ERROR_NOT_ENOUGH_MEMORY); 00109 return FALSE; 00110 } 00111 CsrCaptureMessageBuffer( CaptureBuffer, 00112 (PCHAR) lpIoctlParam->lpvOutBuffer, 00113 lpIoctlParam->cbOutBuffer, 00114 (PVOID *) &a->VDMIoctlParam.lpvOutBuffer 00115 ); 00116 } 00117 } 00118 #endif // i386 00119 #endif // FE_SB 00120 CsrClientCallServer( (PCSR_API_MSG)&m, 00121 CaptureBuffer, 00122 CSR_MAKE_API_NUMBER( CONSRV_SERVERDLL_INDEX, 00123 ConsolepVDMOperation 00124 ), 00125 sizeof( *a ) 00126 ); 00127 if (NT_SUCCESS( m.ReturnValue )) { 00128 switch (iFunction) { 00129 case VDM_IS_ICONIC: 00130 case VDM_IS_HIDDEN: 00131 lpBool = (PBOOL)lpData; 00132 *lpBool = a->Bool; 00133 break; 00134 case VDM_CLIENT_RECT: 00135 lpRect = (LPRECT)lpData; 00136 *lpRect = a->Rect; 00137 break; 00138 case VDM_CLIENT_TO_SCREEN: 00139 case VDM_SCREEN_TO_CLIENT: 00140 *lpPoint = a->Point; 00141 break; 00142 #if defined(FE_SB) 00143 #if defined(i386) 00144 case VDM_VIDEO_IOCTL: 00145 if (lpIoctlParam->lpvOutBuffer != NULL) { 00146 try { 00147 RtlCopyMemory( lpIoctlParam->lpvOutBuffer, 00148 a->VDMIoctlParam.lpvOutBuffer, 00149 lpIoctlParam->cbOutBuffer ); 00150 } except( EXCEPTION_EXECUTE_HANDLER ) { 00151 CsrFreeCaptureBuffer( CaptureBuffer ); 00152 SET_LAST_ERROR(ERROR_INVALID_ACCESS); 00153 return FALSE; 00154 } 00155 } 00156 if (CaptureBuffer != NULL) { 00157 CsrFreeCaptureBuffer( CaptureBuffer ); 00158 } 00159 break; 00160 #endif // i386 00161 #endif // FE_SB 00162 default: 00163 break; 00164 } 00165 return TRUE; 00166 } else { 00167 #if defined(FE_SB) 00168 #if defined(i386) 00169 if (CaptureBuffer != NULL) { 00170 CsrFreeCaptureBuffer( CaptureBuffer ); 00171 } 00172 #endif // i386 00173 #endif // FE_SB 00174 SET_LAST_NT_ERROR (m.ReturnValue); 00175 return FALSE; 00176 } 00177 } }


Generated on Sat May 15 19:43:17 2004 for test by doxygen 1.3.7