`
javasee
  • 浏览: 980625 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

reactos操作系统实现(189)

阅读更多

DCdevice context)是一个图形对象、图形属性和影响图形输出的集合结构体。CreateDC函数用给定名称为指定的设备创建设备环境。CreateDC一般用于创建打印机的设备环境,也可以用来得到屏幕(硬件屏幕,而不是窗口的客户区)的设备环境。请小心使用这个函数,因为它允许应用程序在屏幕上任何位置绘图,而不仅仅是在窗口的边界内。请用GetDCBeginPaint来获取屏幕窗口的设备环境。

#001 HDC

#002 WINAPI

#003 CreateDCW (

#004 LPCWSTR lpwszDriver,

#005 LPCWSTR lpwszDevice,

#006 LPCWSTR lpwszOutput,

#007 CONST DEVMODEW *lpInitData

#008 )

#009 {

#010

#011 return IntCreateDICW ( lpwszDriver,

#012 lpwszDevice,

#013 lpwszOutput,

#014 (PDEVMODEW) lpInitData,

#015 0 );

#016 }

lpwszDriver是指向空值结尾的字符串的指针,字符串说明设备驱动程序的文件名。比如“DISPLAY”指的是显示器驱动程序,而“WINSPOOL”就是指打印驱动程序。

lpwszDevice是批向空值结尾的字符串的指针,字符串指定了正在使用的专用输出设备的名称,比如打印管理程序名称。

lpwszOutput是没有使用参数,一般设置为NULL

lpInitData是指向结构包含了设备驱动程序的设备专用初始化数据。设置为NULL时,就使用系统默认的初始化参数。

下面接着来分析函数IntCreateDICW的代码:

#001 HDC

#002 FASTCALL

#003 IntCreateDICW ( LPCWSTR lpwszDriver,

#004 LPCWSTR lpwszDevice,

#005 LPCWSTR lpwszOutput,

#006 PDEVMODEW lpInitData,

#007 ULONG iType )

#008 {

#009 UNICODE_STRING Device, Output;

#010 HDC hDC = NULL;

#011 BOOL Display = FALSE, Default = TRUE;

#012 ULONG UMdhpdev = 0;

#013

#014 HANDLE hspool = NULL;

#015

加载打印驱动程序。

#016 if ( !ghSpooler && !LoadTheSpoolerDrv())

#017 {

#018 DPRINT1("WinSpooler.Drv Did not load!\n");

#019 }

#020 else

#021 {

#022 DPRINT("WinSpooler.Drv Loaded! hMod -> 0x%x\n", ghSpooler);

#023 }

#024

根据设备名称判断获取什么样的设备。

#025 if ((!lpwszDevice) && (!lpwszDriver))

#026 {

设置缺省设备名称。

#027 Default = FALSE; // Ask Win32k to set Default device.

#028 Display = TRUE; // Most likely to be DISPLAY.

#029 }

#030 else

#031 {

#032 if ((lpwszDevice) && (wcslen(lpwszDevice) != 0)) // First

#033 {

判断是否获取显示设备。

#034 if (!_wcsnicmp(lpwszDevice, L"\\\\.\\DISPLAY",11)) Display = TRUE;

#035 RtlInitUnicodeString(&Device, lpwszDevice);

#036 }

#037 else

#038 {

#039 if (lpwszDriver) // Second

#040 {

#041 if ((!_wcsnicmp(lpwszDriver, L"DISPLAY",7)) ||

#042 (!_wcsnicmp(lpwszDriver, L"\\\\.\\DISPLAY",11))) Display = TRUE;

#043 RtlInitUnicodeString(&Device, lpwszDriver);

#044 }

#045 }

#046 }

#047

#048 if (lpwszOutput) RtlInitUnicodeString(&Output, lpwszOutput);

#049

#050 if (!Display)

#051 {

#052 //Handle Print device or something else.

#053 DPRINT1("Not a DISPLAY device! %wZ\n", &Device);

#054 }

#055

调用WIN32K内核NtGdiOpenDCW函数打开设备。

#056 hDC = NtGdiOpenDCW( (Default ? &Device : NULL),

#057 (PDEVMODEW) lpInitData,

#058 (lpwszOutput ? &Output : NULL),

#059 iType, // DCW 0 and ICW 1.

#060 Display,

#061 hspool,

#062 (PVOID) NULL, // NULL for now.

#063 (PVOID) &UMdhpdev );

#064 #if 0

#065 // Handle something other than a normal dc object.

#066 if (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC)

#067 {

#068 PDC_ATTR Dc_Attr;

#069 PLDC pLDC;

#070

#071 GdiGetHandleUserData((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC, (PVOID) &Dc_Attr);

#072

#073 pLDC = LocalAlloc(LMEM_ZEROINIT, sizeof(LDC));

#074

#075 Dc_Attr->pvLDC = pLDC;

#076 pLDC->hDC = hDC;

#077 pLDC->iType = LDC_LDC; // 1 (init) local DC, 2 EMF LDC

#078 DbgPrint("DC_ATTR Allocated -> 0x%x\n",Dc_Attr);

#079 }

#080 #endif

返回DC给应用程序。

#081 return hDC;

#082 }

分享到:
评论

相关推荐

    ReactOS-0.3.3源码

    ReactOS-0.3.3源码是一款开源操作系统项目,旨在构建一个与Microsoft Windows系统高度兼容的免费替代品。这个项目对于那些希望了解操作系统工作原理,尤其是Windows内核机制的开发者和研究者来说,是一个宝贵的资源...

    reactos可调试光盘映像

    ReactOS是一款开源、免费的操作系统,致力于实现与微软Windows NT系列操作系统高度兼容。这款系统采用微内核架构,由全球的志愿者开发者共同维护和开发。"reactos可调试光盘映像"指的是专为开发和调试目的设计的...

    ReactOS source code

    ReactOS源代码是开源项目ReactOS的核心组成部分,它旨在实现一个与Microsoft Windows操作系统高度兼容的免费和开放源代码操作系统。这个项目始于1996年,由一群对Windows内核工作原理感兴趣的开发者发起,目标是提供...

    ReactOS-0.3.14源代码

    ReactOS-0.3.14源代码是一个重要的开源项目,旨在实现与Windows NT系列操作系统高度兼容的自由软件。这个项目的核心目标是提供一个与Windows系统底层行为相似的开源环境,使得用户和开发者可以在不依赖Microsoft ...

    预装了ReactOS的VMware虚拟机

    这个版本的VMware虚拟机文件(ReactOS-0.3.13-VMware)包含了所有必要的组件,包括ReactOS操作系统映像以及VMware Workstation Player或Player Pro的配置设置,以便用户可以直接启动并运行ReactOS。文件名中的...

    reactos源代码

    ReactOS是一个开源、免费的操作系统项目,旨在实现与Microsoft Windows高度兼容。它的源代码是学习Windows操作系统底层工作原理以及软件开发的重要资源。ReactOS的开发始于1996年,目标是提供一个与Windows NT系列...

    ReactOS-0.3.15

    ReactOS是一个开源、免费的操作系统项目,其目标是创建一个与Windows NT家族(包括NT4.0、2000、XP和2003)高度兼容的替代品。这个项目始于1996年,旨在提供一个与微软Windows类似的用户体验,同时保持底层操作系统...

    ReactOS_Fix

    ReactOS是一个开源项目,旨在实现一个与Microsoft Windows操作系统兼容的自由软件。它的目标是提供一个与Windows NT内核类似的环境,允许Windows应用程序和驱动程序在ReactOS上无缝运行。 在开发和维护ReactOS的...

    reactos键盘切换

    ReactOS键盘切换程序,简称KBSwitch,是ReactOS操作系统中的一个重要组件,它负责管理和实现系统小托盘区域的键盘布局切换功能。ReactOS是一个开源、免费的操作系统,旨在实现与微软Windows系统的高度兼容性。...

    ReactOS-0317-CLT2015-Source

    ReactOS是一个开源操作系统项目,旨在实现与微软Windows操作系统兼容的免费和开放源代码替代品。ReactOS-0317-CLT2015-Source这个压缩包包含了ReactOS在2015年3月17日版本的源代码。这个版本的源代码对于开发者和...

    ReactOS-0.4.13-release-14-g2494cfc-iso.zip

    ReactOS项目致力于为大家开发一个免费而且完全兼容 Microsoft Windows XP 的操作系统。ReactOS 旨在通过使用类似构架和提供完整公共接口实现与 NT 以及 XP 操作系统二进制下的应用程序和驱动设备的完全兼容。 ...

    reactos-0.3.12.zip

    ReactOS是一个开源、免费的操作系统项目,旨在实现与微软Windows操作系统高度兼容。它的目标是创建一个与Windows NT内核相似的系统,使得软件开发者和用户可以在ReactOS上运行原本为Windows设计的应用程序,无需进行...

    ReactOS 源码

    ReactOS是一个开源、免费的操作系统项目,旨在实现与Microsoft Windows操作系统兼容。它的源码提供了深入理解Windows内核工作原理的机会,对于操作系统开发者、驱动程序编写者以及对底层系统有兴趣的人员来说,是一...

    REACTOS当中Rundll的实现

    ReactOS是一个开源操作系统,旨在与Microsoft Windows兼容。在ReactOS中,`Rundll`是实现Windows兼容性的重要组成部分,它允许程序加载和执行DLL(动态链接库)中的函数。`Rundll32.exe`是Windows系统中的一个实用...

    漫谈兼容内核之一:ReactOS怎样实现系统调用

    ReactOS是一个旨在创建自由及开源的操作系统的项目,其主要目标是实现对Microsoft Windows的高度兼容性。这意味着除了用户界面的相似之外,ReactOS还必须能够运行大量为Windows设计的软件和硬件驱动。为了达到这一...

    Windows内核情景分析-采用开源代码ReactOS(下册)高清pdf版

    本书《Windows内核情景分析-采用开源代码ReactOS(下册)》是一本深入探讨Windows操作系统内核的专著,作者采用了开源操作系统ReactOS的源代码作为分析材料,对Windows内核的结构、功能、算法和实现进行了详细的解剖...

    ReactOS-0.4.11-src.zip

    ReactOS-0.4.11-src.zip是一个包含ReactOS 0.4.11源代码的压缩包,该项目是一个开放源代码的操作系统,旨在实现与Microsoft Windows的高度兼容性。这个压缩包对于开发者、学生以及对操作系统底层工作原理感兴趣的人...

    ( ReactOS-0.3.13-REL-src(1).zip )

    ReactOS 是一个开源的、免费的操作系统项目,旨在实现与微软Windows NT内核系列操作系统(如Windows 2000, XP, Vista, 7等)的高度兼容。ReactOS-0.3.13-REL-src(1).zip 文件是一个包含ReactOS 0.3.13版本源代码的...

    cpp-ReactOS一个免费兼容Windows的操作系统

    ReactOS是一个开源、免费的操作系统项目,旨在实现与Microsoft Windows的源代码级兼容性。它的设计目标是提供一个与Windows NT内核家族相媲美的、符合用户和开发者期望的环境,但并不依赖于任何专有技术。ReactOS的...

    ReactOS-0.4.7-PressKit_ReactOS_

    ReactOS是一个开源、免费的操作系统,致力于实现与微软Windows NT系列操作系统高度兼容。ReactOS-0.4.7-PressKit是ReactOS项目为0.4.7版本发布准备的媒体资料包,主要包含了用于宣传和报道ReactOS 0.4.7版本更新的...

Global site tag (gtag.js) - Google Analytics