BOOL wf_mirror_driver_cleanup(wfInfo* context) { int status; status = ExtEscape(context->driverDC, dmf_esc_usm_pipe_unmap, sizeof(GETCHANGESBUF), (LPSTR) context->changeBuffer, 0, 0); if (status <= 0) { _tprintf(_T("Failed to unmap shared memory from the driver! code %d\n"), status); } if (context->driverDC != NULL) { status = DeleteDC(context->driverDC); if (status == 0) { _tprintf(_T("Failed to release DC!\n")); } } free(context->changeBuffer); return TRUE; }
BOOL vncVideoDriver::TestMapped() { _ASSERTE(IsWinNT()); TCHAR *pDevName; if (IsWinVerOrHigher(5, 0)) { DISPLAY_DEVICE dd; INT devNum = 0; if (!LookupVideoDeviceAlt(szDriverString, szDriverStringAlt, devNum, &dd)) return FALSE; pDevName = (TCHAR *)dd.DeviceName; } else { pDevName = "DISPLAY"; } HDC l_ddc = ::CreateDC(pDevName, NULL, NULL, NULL); if (l_ddc) { BOOL b = ExtEscape(l_ddc, TESTMAPPED, 0, NULL, 0, NULL); DeleteDC(l_ddc); return b; } return FALSE; }
BOOL wf_mirror_driver_map_memory(wfInfo* context) { int status; GETCHANGESBUF* b; context->driverDC = CreateDC(context->deviceName, NULL, NULL, NULL); if (context->driverDC == NULL) { _tprintf(_T("Could not create device driver context!\n")); return FALSE; } context->changeBuffer = malloc(sizeof(GETCHANGESBUF)); ZeroMemory(context->changeBuffer, sizeof(GETCHANGESBUF)); status = ExtEscape(context->driverDC, dmf_esc_usm_pipe_map, 0, 0, sizeof(GETCHANGESBUF), (LPSTR) context->changeBuffer); if (status <= 0) { _tprintf(_T("Failed to map shared memory from the driver! code %d\n"), status); } b = (GETCHANGESBUF*) context->changeBuffer; return TRUE; }
BOOL vncVideoDriver::MapSharedbuffers(BOOL fForDirectScreenAccess) { _ASSERTE(!m_fIsActive); _ASSERTE(!m_fDirectAccessInEffect); _ASSERTE(IsWinNT()); HDC l_gdc= ::CreateDC(m_devname, NULL, NULL, NULL); if (!l_gdc) { vnclog.Print( LL_INTERR, VNCLOG("vncVideoDriver::MapSharedbuffers: can't create DC on \"%s\"\n"), m_devname); return FALSE; } oldCounter = 0; int drvCr = ExtEscape( l_gdc, MAP1, 0, NULL, sizeof(GETCHANGESBUF), (LPSTR) &bufdata); DeleteDC(l_gdc); if (drvCr <= 0) { vnclog.Print( LL_INTERR, VNCLOG("vncVideoDriver::MapSharedbuffers: MAP1 call returned 0x%x\n"), drvCr); return FALSE; } m_fIsActive = true; if (fForDirectScreenAccess) { if (!bufdata.Userbuffer) { vnclog.Print( LL_INTERR, VNCLOG("vncVideoDriver::MapSharedbuffers: mirror screen view is NULL\n")); return FALSE; } m_fDirectAccessInEffect = true; } else { if (bufdata.Userbuffer) { vnclog.Print( LL_INTINFO, VNCLOG("vncVideoDriver::MapSharedbuffers: mirror screen view is mapped but direct access mode is OFF\n")); } } // Screen2Screen support added in Mirage ver 1.2 m_fHandleScreen2ScreenBlt = (m_drv_ver_mj > 1) || (m_drv_ver_mj == 1 && m_drv_ver_mn >= 2); return TRUE; }
bool Display::BlankSupported() { RootCanvas canvas; int i = SETPOWERMANAGEMENT; return ExtEscape(canvas, QUERYESCSUPPORT, sizeof(i), (LPCSTR)&i, 0, NULL) > 0; }
bool Display::BlankSupported() { RootDC dc; int i = SETPOWERMANAGEMENT; return ExtEscape(dc, QUERYESCSUPPORT, sizeof(i), (LPCSTR)&i, 0, nullptr) > 0; }
int OS_CreateOverlay(OVERLAY_IOCTL *povlIoctl) { int retval; HDC hDC = GetDC(NULL); retval = ExtEscape(hDC, LCD_OVERLAY_CREATE, sizeof(*povlIoctl), (LPCSTR)povlIoctl, 0, NULL); ReleaseDC(NULL, hDC); return retval; }
int OS_SetScreenBackground(unsigned int nBackRGB) { int retval; HDC hDC = GetDC(NULL); retval = ExtEscape(hDC, LCD_BACKGROUND_SET, sizeof(nBackRGB), (LPSTR)&nBackRGB, 0, NULL); ReleaseDC(NULL, hDC); return retval; }
int OS_GetScreenColorkey(LCD_COLORKEY_IOCTL *pckIoctl) { int retval; HDC hDC = GetDC(NULL); retval = ExtEscape(hDC, LCD_COLORKEY_GET, sizeof(*pckIoctl), (LPSTR)pckIoctl, 0, NULL); ReleaseDC(NULL, hDC); return retval; }
BOOL vx_mon_isUpdate(vx_mon_state *mon) //해당 모니터가 업데이트 되었나 ? { int res; res = ExtEscape(mon->hDC,ESC_GET_UNIQ,0,NULL,sizeof(mon->token_last),(PCHAR)&mon->token_last); if(!res) return FALSE; if(mon->token == mon->token_last) return FALSE; return TRUE; }
BOOL VIDEODRIVER:: NoHardwareCursor() { HDC gdc; int returnvalue; gdc = GetDC(NULL); returnvalue= ExtEscape(gdc, CURSORDIS, 0, NULL, NULL, NULL); ReleaseDC(NULL,gdc); return true; }
int OS_DestroyOverlay(OVERLAY_IOCTL ovlIoctl) { int retval; HDC hDC = GetDC(NULL); retval = ExtEscape(hDC, LCD_OVERLAY_DESTROY, sizeof(ovlIoctl), (LPCSTR)&ovlIoctl, 0, NULL); ReleaseDC(NULL, hDC); return retval; }
int OS_UpdateOverlay(OVERLAY_UPDATE_IOCTL ovlIoctl) { int retval; HDC hDC = GetDC(NULL); retval = ExtEscape(hDC, LCD_OVERLAY_UPDATE, sizeof(ovlIoctl), (LPCSTR)&ovlIoctl ,0, NULL); ReleaseDC(NULL, hDC); return retval; }
int OS_SetNextOverlayBuffer(OVERLAY_UPDATE_IOCTL ovlIoctl) { int retval; HDC hDC = GetDC(NULL); retval = ExtEscape(hDC, LCD_OVERLAY_SET_NEXT_BUFFER, sizeof(ovlIoctl), (LPCSTR)&ovlIoctl ,0, NULL); ReleaseDC(NULL, hDC); return retval; }
static cairo_bool_t printer_is_postscript_level_3 (HDC dc) { DWORD word; INT ps_feature, ps_level; word = PSIDENT_GDICENTRIC; if (ExtEscape (dc, POSTSCRIPT_IDENTIFY, sizeof(DWORD), (char *)&word, 0, (char *)NULL) <= 0) return FALSE; ps_feature = FEATURESETTING_PSLEVEL; if (ExtEscape (dc, GET_PS_FEATURESETTING, sizeof(INT), (char *)&ps_feature, sizeof(INT), (char *)&ps_level) <= 0) return FALSE; if (ps_level >= 3) return TRUE; return FALSE; }
int OS_SetOverlayConfig(OVERLAY_IOCTL ovlIoctl) { int retval; HDC hDC = GetDC(NULL); ovlIoctl.flags = 0; retval = ExtEscape(hDC, LCD_OVERLAY_CONFIG, sizeof(ovlIoctl), (LPCSTR)&ovlIoctl, 0, NULL); ReleaseDC(NULL, hDC); return retval; }
int OS_GetOverlayConfig(OVERLAY_IOCTL *povlIoctl) { int retval; HDC hDC = GetDC(NULL); povlIoctl->flags = OVERLAY_CONFIG_GET; retval = ExtEscape(hDC, LCD_OVERLAY_CONFIG, sizeof(*povlIoctl), (LPCSTR)povlIoctl, 0, NULL); ReleaseDC(NULL, hDC); return retval; }
void enter_gl(void) { Wine_GLContext *curctx = (Wine_GLContext *) NtCurrentTeb()->glContext; if (curctx && curctx->do_escape) { enum x11drv_escape_codes escape = X11DRV_SYNC_PIXMAP; ExtEscape(curctx->hdc, X11DRV_ESCAPE, sizeof(escape), (LPCSTR)&escape, 0, NULL); } wine_tsx11_lock_ptr(); return; }
static DWORD vboxDispIfEscapeXPDM(PCVBOXDISPIF pIf, PVBOXDISPIFESCAPE pEscape, int cbData) { HDC hdc = GetDC(HWND_DESKTOP); VOID *pvData = cbData ? VBOXDISPIFESCAPE_DATA(pEscape, VOID) : NULL; int iRet = ExtEscape(hdc, pEscape->escapeCode, cbData, (LPCSTR)pvData, 0, NULL); ReleaseDC(HWND_DESKTOP, hdc); if (iRet > 0) return VINF_SUCCESS; else if (iRet == 0) return ERROR_NOT_SUPPORTED; /* else */ return ERROR_GEN_FAILURE; }
bool Display::Blank(bool blank) { RootCanvas canvas; VIDEO_POWER_MANAGEMENT vpm; vpm.Length = sizeof(vpm); vpm.DPMSVersion = 0x0001; vpm.PowerState = blank ? VideoPowerOff : VideoPowerOn; return ExtEscape(canvas, SETPOWERMANAGEMENT, sizeof(vpm), (LPCSTR)&vpm, 0, NULL) > 0; }
STDMETHODIMP CGfxSAMSUNG::SetAlpha(DWORD dwAlpha) { m_uAlpha = (unsigned char)dwAlpha*0xf/MAX_ALPHA_VAL; if(m_uAlpha > 0xf) m_uAlpha = 0xf; if(!ExtEscape( ::GetDC( NULL ), IOCTL_WIN1_SETALPHA, sizeof(m_uAlpha),(LPCSTR)&m_uAlpha,0,NULL)) { RETAILMSG(1,(L"$$$$$$ SetAlpha Failed ! $$$$$$$$$$$$$$$$$$\n")); return E_FAIL; } return S_OK; }
// Return the virtual address of video RAM uint16 *vidGetVirtVRAM() { // Try GETRAWFRAMEBUFFER method RawFrameBufferInfo frameBufferInfo; HDC hdc = GetDC(NULL); int ret = ExtEscape(hdc, GETRAWFRAMEBUFFER, 0, NULL, sizeof(frameBufferInfo), (char*)&frameBufferInfo); ReleaseDC(NULL, hdc); if (ret > 0) { videoW = 480; //frameBufferInfo.cxPixels; videoH = 800; //frameBufferInfo.cyPixels; return (uint16*)frameBufferInfo.pFramePointer; } // Try GAPI method. if (late_GXOpenDisplay(GetDesktopWindow(), 0)) { uint16 *vaddr = (uint16 *)late_GXBeginDraw(); videoW = 480;//GetSystemMetrics(SM_CXSCREEN); videoH = 800;// GetSystemMetrics(SM_CYSCREEN); late_GXEndDraw(); late_GXCloseDisplay(); return vaddr; } // Try GETGXINFO method. GXDeviceInfo rfb; rfb.Version = 100; hdc = GetDC(NULL); ret = ExtEscape(hdc, GETGXINFO, 0, NULL, sizeof(rfb), (char*)&rfb); ReleaseDC(NULL, hdc); if (ret > 0) { videoW = 280;//rfb.cxWidth; videoH = 800;//rfb.cyHeight; return (uint16 *)rfb.pvFrameBuffer; } Output("Unable to detect frame buffer address"); return 0; }
void i_vx_add_device(vx_state *vx,DISPLAY_DEVICE dd) { int res; strcpy(vx->monitor[vx->max_mon].DeviceName,dd.DeviceName); strcpy(vx->monitor[vx->max_mon].DeviceString,dd.DeviceString); vx->monitor[vx->max_mon].DeviceState = dd.StateFlags; //framebuffer / token / vxDevice / res / depth 갱신하기 // Token vx->monitor[vx->max_mon].hDC = CreateDC(NULL,vx->monitor[vx->max_mon].DeviceName, NULL, NULL); res = ExtEscape(vx->monitor[vx->max_mon].hDC,ESC_GET_UNIQ,0,NULL,sizeof(vx->monitor[vx->max_mon].token),(PCHAR)&(vx->monitor[vx->max_mon].token)); if(!res) { //만일 가상 장치가 아닌 경우 release 시킨다 vx->monitor[vx->max_mon].is_vxDevice = FALSE; DeleteDC(vx->monitor[vx->max_mon].hDC); } else { //Framebuffer 및 해상도 정보를 갱신한다. vx->monitor[vx->max_mon].is_vxDevice = TRUE; res = ExtEscape(vx->monitor[vx->max_mon].hDC,ESC_GET_MAPPATH,0,NULL,sizeof(vx->monitor[vx->max_mon].wpath),(PCHAR)&(vx->monitor[vx->max_mon].wpath)); if(!res) { //failed! return; } vx->monitor[vx->max_mon].DeviceVideoMemory = i_vx_GetSharedMemoryW(vx->monitor[vx->max_mon].wpath); vx->monitor[vx->max_mon].pos.x = *(((int*)vx->monitor[vx->max_mon].DeviceVideoMemory)); vx->monitor[vx->max_mon].pos.y = *(((int*)vx->monitor[vx->max_mon].DeviceVideoMemory)+1); vx->monitor[vx->max_mon].depth = *(((int*)vx->monitor[vx->max_mon].DeviceVideoMemory)+2); vx->monitor[vx->max_mon].DeviceFramebuffer = (char*)(((int*)vx->monitor[vx->max_mon].DeviceVideoMemory)+3); } vx->max_mon++; }
void CPSOutput::OutputPS(const FX_CHAR* string, int len) { if (len < 0) { len = (int)FXSYS_strlen(string); } int sent_len = 0; while (len > 0) { int send_len = len > 1024 ? 1024 : len; *(FX_WORD*)m_pBuf = send_len; FXSYS_memcpy(m_pBuf + 2, string + sent_len, send_len); ExtEscape(m_hDC, PASSTHROUGH, send_len + 2, m_pBuf, 0, NULL); sent_len += send_len; len -= send_len; } }
BOOL wf_mirror_driver_map_memory(wfInfo* wfi) { int status; wfi->driverDC = CreateDC(wfi->deviceName, NULL, NULL, NULL); if (wfi->driverDC == NULL) { WLog_ERR(TAG, "Could not create device driver context!"); { LPVOID lpMsgBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and exit the process WLog_ERR(TAG, "CreateDC failed on device [%s] with error %lu: %s", wfi->deviceName, dw, lpMsgBuf); LocalFree(lpMsgBuf); } return FALSE; } wfi->changeBuffer = calloc(1, sizeof(GETCHANGESBUF)); if (!wfi->changeBuffer) return FALSE; status = ExtEscape(wfi->driverDC, dmf_esc_usm_pipe_map, 0, 0, sizeof(GETCHANGESBUF), (LPSTR) wfi->changeBuffer); if (status <= 0) { WLog_ERR(TAG, "Failed to map shared memory from the driver! code %d", status); return FALSE; } return TRUE; }
STDMETHODIMP CGfxRMI::init_mae_driver() { DRV_ESCAPE_MAE_CONFIG config; HDC hDC; config.x = 0; config.y = 0; config.w = m_dwWidth; config.h = m_dwHeight; config.bpp = 32; config.colorkey = RGB(0x00,0x08,0x00); config.backcolor = RGB(0x04,0x04,0x04); config.fullscreen = 1; hDC = GetDC(NULL); ExtEscape(hDC,DRV_ESCAPE_MAE_ENABLE,sizeof(config),(char*)&config,0,NULL); ReleaseDC(NULL,hDC); return S_OK; }
void DisplayOff() { /* Switch the screen off now */ HDC hdc; VIDEO_POWER_MANAGEMENT vpm; hdc = GetDC(NULL); vpm.PowerState = VideoPowerOff; vpm.Length = sizeof(VIDEO_POWER_MANAGEMENT); ExtEscape(hdc, SETPOWERMANAGEMENT, sizeof(VIDEO_POWER_MANAGEMENT), (LPCSTR)&vpm, 0, NULL); return; }
BOOL wf_mirror_driver_cleanup(wfInfo* wfi) { int status; status = ExtEscape(wfi->driverDC, dmf_esc_usm_pipe_unmap, sizeof(GETCHANGESBUF), (LPSTR) wfi->changeBuffer, 0, 0); if (status <= 0) { WLog_ERR(TAG, "Failed to unmap shared memory from the driver! code %d", status); } if (wfi->driverDC != NULL) { status = DeleteDC(wfi->driverDC); if (status == 0) { WLog_ERR(TAG, "Failed to release DC!")); }
bool CPSOutput::WriteBlock(const void* str, size_t len) { int sent_len = 0; while (len > 0) { char buffer[1026]; size_t send_len = std::min(len, static_cast<size_t>(1024)); *(reinterpret_cast<uint16_t*>(buffer)) = send_len; memcpy(buffer + 2, static_cast<const char*>(str) + sent_len, send_len); switch (m_mode) { case OutputMode::kExtEscape: ExtEscape(m_hDC, PASSTHROUGH, send_len + 2, buffer, 0, nullptr); break; case OutputMode::kGdiComment: GdiComment(m_hDC, send_len + 2, reinterpret_cast<const BYTE*>(buffer)); break; } sent_len += send_len; len -= send_len; } return true; }
static BOOL dispBitmap(HDC hDC, LPCTSTR lpszFileName) { HANDLE hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) return FALSE; DISPBITMAP dispBmp; dispBmp.nCount = (int)GetFileSize(hFile, NULL); dispBmp.x = dispBmp.y = 0; dispBmp.pBuffer = new BYTE [dispBmp.nCount]; if (NULL == dispBmp.pBuffer) { CloseHandle(hFile); return FALSE; } DWORD dwNumberOfBytesRead; ReadFile(hFile, dispBmp.pBuffer, dispBmp.nCount, &dwNumberOfBytesRead, NULL); if (dispBmp.nCount != dwNumberOfBytesRead) { CloseHandle(hFile); delete [] dispBmp.pBuffer; return FALSE; } dispBmp.pUpdate = NULL; dispBmp.bIsWait = TRUE; int nRet = ExtEscape(hDC, DRVESC_DISP_BITMAP, sizeof(dispBmp), (LPCSTR)&dispBmp, 0, NULL); RETAILMSG(0, (_T("+ DRVESC_DISP_BITMAP %d\r\n"), nRet)); delete [] dispBmp.pBuffer; CloseHandle(hFile); return TRUE; }