亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? functions.c

?? 一個windows顯示驅動的好程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**********************************************************************
 * 
 *  Toby Opferman
 *
 *  Example GDI DDI (Device Driver Interface) Driver Entry Point
 *
 *  This example is for educational purposes only.  I license this source
 *  out for use in learning how to write a device driver.
 *
 *  Copyright (c) 2005, All Rights Reserved  
 **********************************************************************/

#define __NTDDKCOMP__        
#define _MPPC_
#define _WIN32_WINNT 0x500


#include <stddef.h>
#include <stdarg.h>
#include <limits.h>
#include <windef.h>
#include <wingdi.h>
#include <math.h>
#include <winddi.h>
#include <devioctl.h>

#include <ntddvdeo.h>


#include "gdifuncs.h"

#define RESOLUTION_X      800
#define RESOLUTION_Y      600
#define COLOR_DEPTH_BYTES 4
#define COLOR_DEPTH_BITS  32




#define SYSTM_LOGFONT {16,7,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH | FF_DONTCARE,L"System"}
#define HELVE_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,VARIABLE_PITCH | FF_DONTCARE,L"MS Sans Serif"}
#define COURI_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_DONTCARE, L"Courier"}


const DEVINFO gDevInfoFrameBuffer = {
    ( GCAPS_OPAQUERECT  |
     /* GCAPS_LAYERED     |    If you do not really support this you can have big problems */
      GCAPS_DITHERONREALIZE  |
      GCAPS_ALTERNATEFILL    |
      GCAPS_WINDINGFILL      |
      GCAPS_MONO_DITHER      |
      GCAPS_GRAY16           |
      GCAPS_COLOR_DITHER
                   ), /* Graphics capabilities         */
    SYSTM_LOGFONT,    /* Default font description */
    HELVE_LOGFONT,    /* ANSI variable font description   */
    COURI_LOGFONT,    /* ANSI fixed font description          */
    0,                /* Count of device fonts          */
    0,                /* Preferred DIB format          */
    8,                /* Width of color dither          */
    8,                /* Height of color dither   */
    0,                  /* Default palette to use for this device */
    GCAPS2_SYNCTIMER |
    GCAPS2_SYNCFLUSH
};


//#define ENGDEBUGPRINT
#define ENGDEBUGPRINT EngDebugPrint

 
/*********************************************************************
 * GdiExample_DrvEnablePDEV
 *
 *   This function will provide a description of the Physical Device.  The data
 *   returned is a user defined data context to be used as a handle for this
 *   display device.
 *
 *   The hDriver is a handle to the miniport driver associated with this display
 *   device.  This handle can be used to communicate to the miniport through APIs
 *   to send things like IOCTLs.
 *
 *********************************************************************/
DHPDEV GdiExample_DrvEnablePDEV(DEVMODEW *pdm, PWSTR pwszLogAddr, ULONG cPat, HSURF *phsurfPatterns, ULONG cjCaps, GDIINFO *pGdiInfo, ULONG cjDevInfo, DEVINFO *pDevInfo, HDEV hdev, PWSTR pwszDeviceName, HANDLE hDriver) 
{
    PDEVICE_DATA pDeviceData = NULL;
    
    ENGDEBUGPRINT(0, "GdiExample_DrvEnablePDEV Enter \r\n", NULL);

    pDeviceData = (PDEVICE_DATA) EngAllocMem(0, sizeof(DEVICE_DATA), FAKE_GFX_TAG);

    if(pDeviceData)
    {
        memset(pDeviceData, 0, sizeof(DEVICE_DATA));
        memset(pGdiInfo, 0, cjCaps);
        memset(pDevInfo, 0, cjDevInfo);

        {
            pGdiInfo->ulVersion    = 0x5000;
            pGdiInfo->ulTechnology = DT_RASDISPLAY;
            pGdiInfo->ulHorzSize   = 0;
            pGdiInfo->ulVertSize   = 0;
            pGdiInfo->ulHorzRes        = RESOLUTION_X;
            pGdiInfo->ulVertRes        = RESOLUTION_Y;
            pGdiInfo->ulPanningHorzRes = 0;
            pGdiInfo->ulPanningVertRes = 0;
            pGdiInfo->cBitsPixel       = 8;
            pGdiInfo->cPlanes          = 4;
            pGdiInfo->ulNumColors      = 20;
            pGdiInfo->ulVRefresh       = 1;       
            pGdiInfo->ulBltAlignment   = 1;     
            pGdiInfo->ulLogPixelsX = 96;
            pGdiInfo->ulLogPixelsY = 96;
            pGdiInfo->flTextCaps   = TC_RA_ABLE;
            pGdiInfo->flRaster     = 0;
            pGdiInfo->ulDACRed     = 8;
            pGdiInfo->ulDACGreen   = 8;
            pGdiInfo->ulDACBlue    = 8;
            pGdiInfo->ulAspectX    = 0x24; 
            pGdiInfo->ulNumPalReg  = 256;
            pGdiInfo->ulAspectY    = 0x24;
            pGdiInfo->ulAspectXY   = 0x33;
            pGdiInfo->xStyleStep   = 1;       
            pGdiInfo->yStyleStep   = 1;
            pGdiInfo->denStyleStep = 3;
            pGdiInfo->ptlPhysOffset.x = 0;
            pGdiInfo->ptlPhysOffset.y = 0;
            pGdiInfo->szlPhysSize.cx  = 0;
            pGdiInfo->szlPhysSize.cy  = 0;
            pGdiInfo->ciDevice.Red.x = 6700;
            pGdiInfo->ciDevice.Red.y = 3300;
            pGdiInfo->ciDevice.Red.Y = 0;
            pGdiInfo->ciDevice.Green.x = 2100;
            pGdiInfo->ciDevice.Green.y = 7100;
            pGdiInfo->ciDevice.Green.Y = 0;
            pGdiInfo->ciDevice.Blue.x = 1400;
            pGdiInfo->ciDevice.Blue.y = 800;
            pGdiInfo->ciDevice.Blue.Y = 0;
            pGdiInfo->ciDevice.AlignmentWhite.x = 3127;
            pGdiInfo->ciDevice.AlignmentWhite.y = 3290;
            pGdiInfo->ciDevice.AlignmentWhite.Y = 0;
            pGdiInfo->ciDevice.RedGamma = 20000;
            pGdiInfo->ciDevice.GreenGamma = 20000;
            pGdiInfo->ciDevice.BlueGamma = 20000;
            pGdiInfo->ciDevice.Cyan.x = 1750;
            pGdiInfo->ciDevice.Cyan.y = 3950;
            pGdiInfo->ciDevice.Cyan.Y = 0;
            pGdiInfo->ciDevice.Magenta.x = 4050;
            pGdiInfo->ciDevice.Magenta.y = 2050;
            pGdiInfo->ciDevice.Magenta.Y = 0;
            pGdiInfo->ciDevice.Yellow.x = 4400;
            pGdiInfo->ciDevice.Yellow.y = 5200;
            pGdiInfo->ciDevice.Yellow.Y = 0;
            pGdiInfo->ciDevice.MagentaInCyanDye = 0;
            pGdiInfo->ciDevice.YellowInCyanDye = 0;
            pGdiInfo->ciDevice.CyanInMagentaDye = 0;
            pGdiInfo->ciDevice.YellowInMagentaDye = 0;
            pGdiInfo->ciDevice.CyanInYellowDye = 0;
            pGdiInfo->ciDevice.MagentaInYellowDye = 0;
            pGdiInfo->ulDevicePelsDPI = 0; 
            pGdiInfo->ulPrimaryOrder = PRIMARY_ORDER_CBA;
            pGdiInfo->ulHTPatternSize = HT_PATSIZE_4x4_M;
            pGdiInfo->flHTFlags = HT_FLAG_ADDITIVE_PRIMS;
            pGdiInfo->ulHTOutputFormat = HT_FORMAT_32BPP;

            
            *pDevInfo = gDevInfoFrameBuffer;
            pDevInfo->iDitherFormat = BMF_32BPP;

        }

        pDeviceData->pVideoMemory = EngMapFile(L"\\??\\c:\\video.dat", RESOLUTION_X*RESOLUTION_Y*4, &pDeviceData->pMappedFile);

        pDeviceData->hDriver = hDriver;
        pDevInfo->hpalDefault = EngCreatePalette(PAL_BITFIELDS, 0, NULL, 0xFF0000, 0xFF00, 0xFF);
    }

    ENGDEBUGPRINT(0, "GdiExample_DrvEnablePDEV Exit \r\n", NULL);

    return (DHPDEV)pDeviceData;
}

/*********************************************************************
 * GdiExample_DrvCompletePDEV
 *
 *   This is called to complete the process of enabling the device.
 *   
 *
 *********************************************************************/
void GdiExample_DrvCompletePDEV(DHPDEV  dhpdev, HDEV  hdev)
{
    PDEVICE_DATA pDeviceData = (PDEVICE_DATA)dhpdev;
    ENGDEBUGPRINT(0, "GdiExample_DrvCompletePDEV Enter \r\n", NULL);

    pDeviceData->hdev = hdev;

    ENGDEBUGPRINT(0, "GdiExample_DrvCompletePDEV Exit \r\n", NULL);
}


/*********************************************************************
 * GdiExample_DrvAssertMode
 *
 *    This API sets the display mode of the device to the original mode
 *    which was used during initialization or the default mode of the hardware.
 *
 *********************************************************************/
BOOL GdiExample_DrvAssertMode(DHPDEV  dhpdev,BOOL  bEnable)
{

    ENGDEBUGPRINT(0, "GdiExample_DrvAssertMode\r\n", NULL);

    /*
     * We do nothing here
     */
    return TRUE;
}

/*********************************************************************
 * GdiExample_DrvDisablePDEV
 *
 *   This is called to disable the PDEV we created.
 *   
 *
 *********************************************************************/
void GdiExample_DrvDisablePDEV(DHPDEV  dhpdev)
{
    PDEVICE_DATA pDeviceData = (PDEVICE_DATA)dhpdev;
    UINT dwBytesReturned = 0;

    ENGDEBUGPRINT(0, "GdiExample_DrvDisablePDEV\r\n", NULL);

    if(pDeviceData->pMappedFile)
    {
       EngUnmapFile(pDeviceData->pMappedFile);
    }

    EngFreeMem(dhpdev);
}


/*********************************************************************
 * GdiExample_DrvEscape
 *
 *    This is the equivlent of an "IOCTL" for a display driver but instead
 *    of an "IOCTL" you have "ESCAPE CODES".  This is how you can communicate
 *    to this display driver in a device DEPENDENT manner instead of INDEPENDENT.
 *
 *    To call into this interface from user mode you use the "ExtEscape" API.
 *
 *********************************************************************/
ULONG GdiExample_DrvEscape(SURFOBJ *pso, ULONG iEsc, ULONG  cjIn, PVOID  pvIn, ULONG cjOut, PVOID pvOut)
{
    ENGDEBUGPRINT(0, "GdiExample_DrvEscape\r\n", NULL);
    return 0;
}



/*********************************************************************
 * GdiExample_DrvGetModes
 *
 *    This API is used to enumerate display modes.
 *
 *    This driver only supports 800x600x32
 *
 *********************************************************************/
ULONG GdiExample_DrvGetModes(HANDLE hDriver, ULONG cjSize, DEVMODEW *pdm)
{
   ULONG ulBytesWritten = 0, ulBytesNeeded = sizeof(DEVMODEW);
   ULONG ulReturnValue;
   ENGDEBUGPRINT(0, "GdiExample_DrvGetModes\r\n", NULL);
   if(pdm == NULL)
   {
       ulReturnValue =  ulBytesNeeded;
   }
   else
   {
       

       ulBytesWritten = sizeof(DEVMODEW);

       memset(pdm, 0, sizeof(DEVMODEW));
       memcpy(pdm->dmDeviceName, DLL_NAME, sizeof(DLL_NAME));

       pdm->dmSpecVersion   = DM_SPECVERSION;
       pdm->dmDriverVersion = DM_SPECVERSION;

       pdm->dmDriverExtra      = 0;
       pdm->dmSize             = sizeof(DEVMODEW);
       pdm->dmBitsPerPel       = 32;
       pdm->dmPelsWidth        = RESOLUTION_X;
       pdm->dmPelsHeight       = RESOLUTION_Y;
       pdm->dmDisplayFrequency = 75;

       pdm->dmDisplayFlags     = 0;
       
       pdm->dmPanningWidth     = pdm->dmPelsWidth;
       pdm->dmPanningHeight    = pdm->dmPelsHeight;

       pdm->dmFields           = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFLAGS | DM_DISPLAYFREQUENCY;

       ulReturnValue = ulBytesWritten;

   }

   return ulReturnValue;
}


/*********************************************************************
 * GdiExample_DrvResetPDEV
 *
 *    This API is used to pass state information from one PDEV
 *    instance to another.
 *
 *********************************************************************/
BOOL GdiExample_DrvResetPDEV(DHPDEV  dhpdevOld, DHPDEV  dhpdevNew)
{
    ENGDEBUGPRINT(0, "GdiExample_DrvResetPDEV\r\n", NULL);

    return FALSE;
}




/*********************************************************************
 * GdiExample_DrvEnableSurface
 *
 *  This API is used to enable the physical device surface.  
 *

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费久久| 777色狠狠一区二区三区| 一本色道久久加勒比精品 | 日韩视频在线你懂得| 精品1区2区在线观看| 国产精品二区一区二区aⅴ污介绍| 亚洲免费在线播放| 免费看日韩精品| 成人中文字幕合集| 欧美日韩国产高清一区二区| 精品国产制服丝袜高跟| 国产精品久久久久久久蜜臀| 亚洲bt欧美bt精品777| 国产一区欧美一区| 99精品视频在线免费观看| 欧美一区二区三区四区在线观看| 中文字幕精品在线不卡| 亚洲国产精品久久久久秋霞影院| 久久国产视频网| 91福利国产成人精品照片| 精品国产一区二区亚洲人成毛片| 综合久久久久综合| 日本伊人色综合网| 99视频精品全部免费在线| 91麻豆精品国产自产在线观看一区 | 中文字幕第一区第二区| 在线免费不卡电影| 精品免费一区二区三区| 亚洲精品高清在线观看| 国产一区视频导航| 欧美狂野另类xxxxoooo| 国产精品美女视频| 开心九九激情九九欧美日韩精美视频电影 | 在线一区二区三区做爰视频网站| 2021中文字幕一区亚洲| 亚洲一区二区中文在线| 丁香啪啪综合成人亚洲小说 | 奇米色一区二区| 99精品视频一区二区三区| 精品久久久久久久久久久久包黑料| 亚洲欧洲综合另类| 国产福利一区二区三区视频| 欧美欧美欧美欧美首页| 亚洲免费观看在线观看| 成人一区二区三区在线观看| 欧美成人伊人久久综合网| 亚洲制服欧美中文字幕中文字幕| 国产精品中文字幕一区二区三区| 91精品在线麻豆| 亚洲综合成人在线视频| 不卡欧美aaaaa| 国产日韩欧美精品电影三级在线 | 欧美成人bangbros| 午夜精品福利一区二区三区av | 午夜欧美2019年伦理 | 亚洲成人黄色小说| 一本到不卡精品视频在线观看| 中文字幕二三区不卡| 国产精品一区一区三区| 欧美本精品男人aⅴ天堂| 天天av天天翘天天综合网色鬼国产| 在线这里只有精品| 亚洲宅男天堂在线观看无病毒| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品久久看| 成人午夜激情影院| 国产精品动漫网站| 99re在线精品| 中文字幕一区二区三区在线观看 | 亚洲视频一区在线观看| 成人在线视频一区二区| 国产清纯在线一区二区www| 国产二区国产一区在线观看| 国产一区二区三区免费播放| 日韩欧美亚洲国产精品字幕久久久| 日韩电影在线免费| 91精品国产综合久久精品| 日韩激情一区二区| 日韩欧美国产高清| 久久激情五月激情| 久久日韩精品一区二区五区| 国内精品久久久久影院薰衣草| 欧美电影免费观看高清完整版| 久久99九九99精品| 国产亚洲综合在线| 成人aa视频在线观看| 亚洲免费观看高清| 欧美偷拍一区二区| 奇米影视一区二区三区| www国产成人| av在线综合网| 亚洲高清免费观看| 日韩女同互慰一区二区| 国产精品一区二区91| 国产精品毛片大码女人 | 亚洲综合图片区| 91精品国产一区二区三区| 激情小说欧美图片| 日本一区二区免费在线| 91在线观看免费视频| 亚洲444eee在线观看| 91精品国产手机| 国产精品亚洲专一区二区三区| 国产精品热久久久久夜色精品三区 | 欧美成人一区二区| 成人污污视频在线观看| 一区二区三区四区不卡在线 | 国内精品伊人久久久久av影院| 国产欧美视频在线观看| 一本到高清视频免费精品| 日本v片在线高清不卡在线观看| 亚洲精品在线观| 91天堂素人约啪| 日韩高清电影一区| 国产午夜精品美女毛片视频| 色综合久久久久综合体桃花网| 视频在线在亚洲| 国产亚洲女人久久久久毛片| 99久久免费视频.com| 首页国产欧美久久| 国产精品毛片a∨一区二区三区| 欧美日本一区二区| 粉嫩av一区二区三区在线播放 | 欧美一区二区免费观在线| 国产69精品久久777的优势| 一区二区三区精品视频在线| 亚洲精品一区二区三区影院| 日本道在线观看一区二区| 精品在线观看视频| 一区二区三区日韩欧美| 久久综合九色综合欧美98| 欧美中文字幕亚洲一区二区va在线 | 亚洲乱码精品一二三四区日韩在线 | 亚洲国产视频网站| 2020国产精品久久精品美国| 色香色香欲天天天影视综合网| 精品一区二区久久| 亚洲一区二区视频在线| 国产日产精品1区| 欧美精品 国产精品| 成人av电影免费观看| 久色婷婷小香蕉久久| 亚洲自拍偷拍欧美| 国产欧美日韩亚州综合| 欧美一区二区视频在线观看| 97久久超碰精品国产| 国产一区二区导航在线播放| 午夜精品爽啪视频| 亚洲免费色视频| 中文字幕精品综合| 精品国产一区二区精华| 欧美日韩黄色一区二区| 色综合久久久久综合体桃花网| 懂色一区二区三区免费观看| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲一区二区三区国产| 中文字幕欧美一区| 久久精品在线观看| 欧美www视频| 91精品国产综合久久福利软件| 色哟哟一区二区在线观看| 成人久久久精品乱码一区二区三区| 人人狠狠综合久久亚洲| 视频一区中文字幕国产| 一区二区三区91| 亚洲欧美日韩一区二区三区在线观看| 国产视频一区二区在线观看| 日韩精品一区二区三区视频播放| 欧美日本不卡视频| 欧美日韩激情在线| 欧美亚洲国产一区在线观看网站| 99久久99久久精品免费观看| 成人av动漫网站| 国产成人精品免费在线| 国产大陆精品国产| 国产精品一卡二| 国产成人99久久亚洲综合精品| 国产福利不卡视频| 国产成都精品91一区二区三| 国产很黄免费观看久久| 国产美女在线精品| 国产精品一区一区| 成人丝袜视频网| 成人av一区二区三区| caoporn国产精品| 91色在线porny| 91搞黄在线观看| 欧美午夜精品免费| 欧美日韩性生活| 51久久夜色精品国产麻豆| 欧美一级xxx| 亚洲精品在线三区| 国产欧美日韩精品一区| 国产精品理伦片| 亚洲欧美国产高清| 一区二区三区在线免费播放 | 日韩一区二区三区观看| 精品国产伦理网| 久久久久久久久久看片| 国产精品另类一区|