亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
中文字幕一区二区三区四区不卡 | 久久精品国产亚洲高清剧情介绍| 91在线视频官网| 亚洲欧洲日产国码二区| 粉嫩在线一区二区三区视频| 久久久久久久久久久黄色| 亚洲一区二区三区四区五区黄| 99国产精品国产精品久久| 亚洲日本青草视频在线怡红院| 波多野结衣一区二区三区 | 日韩电影在线看| 欧美日韩激情在线| 日韩美女视频一区二区| 色av综合在线| 亚洲在线视频一区| 精品国产人成亚洲区| 国产麻豆精品视频| 亚洲欧美日韩国产一区二区三区| 91色综合久久久久婷婷| 天涯成人国产亚洲精品一区av| 欧美日韩午夜精品| 亚洲国产另类av| 91精品国产综合久久福利| 日韩电影一二三区| 国产精品看片你懂得| 一本大道综合伊人精品热热 | 国产成人免费网站| 国产精品第一页第二页第三页| 欧美亚洲综合久久| 麻豆国产一区二区| 中文字幕色av一区二区三区| 欧美亚洲一区二区在线| 国内精品久久久久影院色| 中文字幕中文字幕一区二区| 色欧美片视频在线观看| 国产麻豆成人传媒免费观看| 欧美激情一区在线| 91精品国产综合久久久蜜臀粉嫩| 精久久久久久久久久久| 亚洲精品国产无天堂网2021| 91精品国产综合久久久久| 成人精品国产免费网站| 亚洲综合一区在线| 欧美本精品男人aⅴ天堂| 色婷婷精品大在线视频| 美国三级日本三级久久99| 亚洲美女电影在线| 欧美大片顶级少妇| 欧美日韩黄视频| 懂色一区二区三区免费观看| 免费人成网站在线观看欧美高清| 26uuu久久天堂性欧美| 91免费观看视频在线| 亚洲老司机在线| 国产日韩一级二级三级| 99久久99久久精品免费看蜜桃| 石原莉奈一区二区三区在线观看| 欧美国产日韩a欧美在线观看 | 欧美一区二区日韩一区二区| 成人蜜臀av电影| 国产二区国产一区在线观看| 午夜欧美大尺度福利影院在线看| 亚洲图片另类小说| 国产亚洲综合在线| 久久亚洲免费视频| 欧美日韩夫妻久久| 欧美三级日韩三级国产三级| 岛国精品一区二区| 亚洲成人综合视频| 日韩一区日韩二区| 日韩欧美国产小视频| 欧美一二三四在线| 在线影视一区二区三区| 91丨porny丨首页| 国产一区二区久久| 国产美女视频91| 日韩国产欧美在线播放| 天天影视涩香欲综合网| 亚洲美女淫视频| 夜夜亚洲天天久久| 亚洲男人的天堂一区二区| 最新高清无码专区| 国产精品网站在线| 91精品国产综合久久精品麻豆| 欧美日韩日日摸| 欧美在线视频不卡| 欧美片在线播放| 91国产成人在线| 欧美三级一区二区| 欧美午夜精品电影| 7777精品伊人久久久大香线蕉完整版| 色偷偷久久一区二区三区| 日本精品一区二区三区高清| 91丨国产丨九色丨pron| 欧美三日本三级三级在线播放| 91浏览器在线视频| 欧美性极品少妇| 欧美揉bbbbb揉bbbbb| 欧美一区二区三级| 欧美一区中文字幕| 精品国产乱码久久久久久影片| 日韩美女视频在线| 91精品国产色综合久久ai换脸| 日韩免费视频线观看| 欧美成人乱码一区二区三区| 国产三级精品三级| 亚洲国产电影在线观看| 一区二区三区免费在线观看| 亚洲自拍偷拍麻豆| 久久精品国产色蜜蜜麻豆| 久久99久久99小草精品免视看| 国产成人综合自拍| 99re热视频精品| 7777精品伊人久久久大香线蕉的 | 欧美丰满少妇xxxbbb| 欧美精品一区视频| 国产精品三级在线观看| 午夜久久久久久久久| 麻豆91在线观看| 色激情天天射综合网| 91麻豆精品国产无毒不卡在线观看| 久久夜色精品国产欧美乱极品| 中文字幕av一区二区三区免费看| 一区二区在线免费观看| 亚欧色一区w666天堂| 国产99精品视频| 在线观看亚洲一区| 国产亚洲精品免费| 亚洲一区二区黄色| 国产成人夜色高潮福利影视| 色丁香久综合在线久综合在线观看 | 久久久久久久国产精品影院| 国产精品嫩草影院av蜜臀| 五月婷婷综合激情| 国产精品综合网| 在线综合视频播放| 国产精品午夜在线| 精品一区二区国语对白| 99久久精品99国产精品| 2019国产精品| 一区二区欧美精品| 成人精品小蝌蚪| 欧美一区二区三区公司| 亚洲精品成人悠悠色影视| 免费观看一级欧美片| 精品视频在线视频| 国产婷婷色一区二区三区| 蓝色福利精品导航| 91小视频在线免费看| 国产欧美日韩亚州综合| 日韩一区精品字幕| 欧美视频一区在线| 国产精品国产三级国产a| 国产高清精品久久久久| 欧美精品日韩一本| 亚洲成人高清在线| 成人综合在线网站| 国产三级欧美三级日产三级99| 亚洲一区二区在线视频| 色伊人久久综合中文字幕| 久久精品视频网| 国产成人av电影免费在线观看| 欧美精品在线观看播放| 午夜精品一区二区三区三上悠亚| proumb性欧美在线观看| 国产精品国产成人国产三级| 精品一区二区三区在线视频| 欧美大尺度电影在线| 亚洲在线一区二区三区| 欧美日韩在线不卡| 日韩毛片精品高清免费| 91丨porny丨在线| 中文一区二区完整视频在线观看 | 狠狠色综合日日| 精品久久久久av影院| 日产精品久久久久久久性色| 7878成人国产在线观看| 亚洲www啪成人一区二区麻豆| 欧美色图片你懂的| 亚洲黄网站在线观看| 欧美日韩成人在线| 亚洲最新在线观看| 欧美精选午夜久久久乱码6080| 樱花草国产18久久久久| 欧美三级视频在线| 亚洲电影在线播放| 日韩欧美一级在线播放| 日韩**一区毛片| 久久嫩草精品久久久精品| 久久99深爱久久99精品| 亚洲国产成人午夜在线一区| 国产经典欧美精品| 亚洲欧美激情插| 91蝌蚪国产九色| 三级在线观看一区二区| 91久久精品一区二区三区| 日本不卡一二三| 欧美精品乱人伦久久久久久| 麻豆精品久久精品色综合| 精品国产免费久久|