mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 18:15:11 +00:00
Add a display class installer (useful when installing display drivers)
Use a common header for desk.cpl files svn path=/trunk/; revision=18683
This commit is contained in:
parent
83070357bd
commit
601eea6d49
15 changed files with 240 additions and 58 deletions
|
@ -293,6 +293,7 @@ media\nls\c_28599.nls 1
|
||||||
media\drivers\etc\services 5
|
media\drivers\etc\services 5
|
||||||
media\inf\acpi.inf 6
|
media\inf\acpi.inf 6
|
||||||
media\inf\cdrom.inf 6
|
media\inf\cdrom.inf 6
|
||||||
|
media\inf\display.inf 6
|
||||||
media\inf\hdc.inf 6
|
media\inf\hdc.inf 6
|
||||||
media\inf\layout.inf 6
|
media\inf\layout.inf 6
|
||||||
media\inf\machine.inf 6
|
media\inf\machine.inf 6
|
||||||
|
|
|
@ -8,10 +8,7 @@
|
||||||
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
#include "desk.h"
|
||||||
#include <commctrl.h>
|
|
||||||
|
|
||||||
#include "resource.h"
|
|
||||||
|
|
||||||
INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg,
|
INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg,
|
||||||
UINT uMsg,
|
UINT uMsg,
|
||||||
|
|
|
@ -8,16 +8,7 @@
|
||||||
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <commctrl.h>
|
|
||||||
#include <commdlg.h>
|
|
||||||
#include <cpl.h>
|
|
||||||
#include <tchar.h>
|
|
||||||
|
|
||||||
#include "resource.h"
|
|
||||||
|
|
||||||
#include "desk.h"
|
#include "desk.h"
|
||||||
#include "dibitmap.h"
|
|
||||||
|
|
||||||
#define MAX_BACKGROUNDS 100
|
#define MAX_BACKGROUNDS 100
|
||||||
|
|
||||||
|
|
177
reactos/lib/cpl/desk/classinst.c
Normal file
177
reactos/lib/cpl/desk/classinst.c
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
/*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS Plug & Play
|
||||||
|
* FILE: lib/cpl/desk/classinst.c
|
||||||
|
* PURPOSE: Display class installer
|
||||||
|
*
|
||||||
|
* PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org)
|
||||||
|
*/
|
||||||
|
|
||||||
|
//#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
#include "desk.h"
|
||||||
|
|
||||||
|
DWORD WINAPI
|
||||||
|
DisplayClassInstaller(
|
||||||
|
IN DI_FUNCTION InstallFunction,
|
||||||
|
IN HDEVINFO DeviceInfoSet,
|
||||||
|
IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
|
||||||
|
{
|
||||||
|
SP_DEVINSTALL_PARAMS InstallParams;
|
||||||
|
SP_DRVINFO_DATA DriverInfoData;
|
||||||
|
HINF hInf = INVALID_HANDLE_VALUE;
|
||||||
|
TCHAR SectionName[MAX_PATH];
|
||||||
|
TCHAR ServiceName[MAX_SERVICE_NAME_LEN];
|
||||||
|
SP_DRVINFO_DETAIL_DATA DriverInfoDetailData;
|
||||||
|
HKEY hServicesKey = INVALID_HANDLE_VALUE;
|
||||||
|
HKEY hServiceKey = INVALID_HANDLE_VALUE;
|
||||||
|
HKEY hDeviceSubKey = INVALID_HANDLE_VALUE;
|
||||||
|
DWORD disposition;
|
||||||
|
BOOL result;
|
||||||
|
LONG rc;
|
||||||
|
|
||||||
|
if (InstallFunction != DIF_INSTALLDEVICE)
|
||||||
|
return ERROR_DI_DO_DEFAULT;
|
||||||
|
|
||||||
|
InstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
|
||||||
|
result = SetupDiGetDeviceInstallParams(DeviceInfoSet, DeviceInfoData, &InstallParams);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupDiGetDeviceInstallParams() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
InstallParams.Flags |= DI_NEEDRESTART;
|
||||||
|
|
||||||
|
result = SetupDiSetDeviceInstallParams(DeviceInfoSet, DeviceInfoData, &InstallParams);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupDiSetDeviceInstallParams() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
DriverInfoData.cbSize = sizeof(SP_DRVINFO_DATA);
|
||||||
|
result = SetupDiGetSelectedDriver(DeviceInfoSet, DeviceInfoData, &DriverInfoData);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupDiGetSelectedDriver() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
DriverInfoDetailData.cbSize = sizeof(SP_DRVINFO_DETAIL_DATA);
|
||||||
|
result = SetupDiGetDriverInfoDetail(
|
||||||
|
DeviceInfoSet, DeviceInfoData,
|
||||||
|
&DriverInfoData, &DriverInfoDetailData,
|
||||||
|
sizeof(SP_DRVINFO_DETAIL_DATA), NULL);
|
||||||
|
if (!result && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupDiGetDriverInfoDetail() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
hInf = SetupOpenInfFile(DriverInfoDetailData.InfFileName, NULL, INF_STYLE_WIN4, NULL);
|
||||||
|
if (hInf == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupOpenInfFile() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = SetupDiGetActualSectionToInstall(
|
||||||
|
hInf, DriverInfoDetailData.SectionName,
|
||||||
|
SectionName, MAX_PATH - _tcslen(_T(".SoftwareSettings")), NULL, NULL);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupDiGetActualSectionToInstall() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
_tcscat(SectionName, _T(".SoftwareSettings"));
|
||||||
|
|
||||||
|
result = SetupDiInstallDevice(DeviceInfoSet, DeviceInfoData);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupDiGetDeviceRegistryProperty() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = SetupDiGetDeviceRegistryProperty(
|
||||||
|
DeviceInfoSet, DeviceInfoData,
|
||||||
|
SPDRP_SERVICE, NULL,
|
||||||
|
(PBYTE)ServiceName, MAX_SERVICE_NAME_LEN * sizeof(TCHAR), NULL);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupDiGetDeviceRegistryProperty() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = RegOpenKeyEx(
|
||||||
|
HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services"),
|
||||||
|
0, KEY_ENUMERATE_SUB_KEYS, &hServicesKey);
|
||||||
|
if (rc != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
DPRINT("RegOpenKeyEx() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
rc = RegOpenKeyEx(
|
||||||
|
hServicesKey, ServiceName,
|
||||||
|
0, KEY_CREATE_SUB_KEY, &hServiceKey);
|
||||||
|
if (rc != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
DPRINT("RegOpenKeyEx() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a Device0 subkey (FIXME: do a loop to find a free number?) */
|
||||||
|
rc = RegCreateKeyEx(
|
||||||
|
hServiceKey, _T("Device0"), 0, NULL,
|
||||||
|
REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL,
|
||||||
|
&hDeviceSubKey, &disposition);
|
||||||
|
if (rc != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
DPRINT("RegCreateKeyEx() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if (disposition != REG_CREATED_NEW_KEY)
|
||||||
|
{
|
||||||
|
rc = ERROR_GEN_FAILURE;
|
||||||
|
DPRINT("RegCreateKeyEx() failed\n");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Install SoftwareSettings section */
|
||||||
|
result = SetupInstallFromInfSection(
|
||||||
|
InstallParams.hwndParent, hInf, SectionName,
|
||||||
|
SPINST_REGISTRY, hDeviceSubKey,
|
||||||
|
NULL, 0, NULL, NULL,
|
||||||
|
NULL, NULL);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
DPRINT("SetupInstallFromInfSection() failed with error 0x%lx\n", rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME: install OpenGLSoftwareSettings section */
|
||||||
|
|
||||||
|
rc = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (hInf != INVALID_HANDLE_VALUE)
|
||||||
|
SetupCloseInfFile(hInf);
|
||||||
|
if (hServicesKey != INVALID_HANDLE_VALUE)
|
||||||
|
RegCloseKey(hServicesKey);
|
||||||
|
if (hServiceKey != INVALID_HANDLE_VALUE)
|
||||||
|
RegCloseKey(hServiceKey);
|
||||||
|
if (hDeviceSubKey != INVALID_HANDLE_VALUE)
|
||||||
|
RegCloseKey(hDeviceSubKey);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
|
@ -8,11 +8,6 @@
|
||||||
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <commctrl.h>
|
|
||||||
#include <cpl.h>
|
|
||||||
|
|
||||||
#include "resource.h"
|
|
||||||
#include "desk.h"
|
#include "desk.h"
|
||||||
|
|
||||||
#define NUM_APPLETS (1)
|
#define NUM_APPLETS (1)
|
||||||
|
|
|
@ -2,5 +2,6 @@ LIBRARY desk.cpl
|
||||||
|
|
||||||
EXPORTS
|
EXPORTS
|
||||||
CPlApplet@16
|
CPlApplet@16
|
||||||
|
DisplayClassInstaller@12
|
||||||
|
|
||||||
; EOF
|
; EOF
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
#ifndef __CPL_DESK_H__
|
#ifndef __CPL_DESK_H__
|
||||||
#define __CPL_DESK_H__
|
#define __CPL_DESK_H__
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <commctrl.h>
|
||||||
|
#include <commdlg.h>
|
||||||
|
#include <cpl.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
#include <setupapi.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int idIcon;
|
int idIcon;
|
||||||
|
@ -13,5 +23,21 @@ typedef struct
|
||||||
|
|
||||||
extern HINSTANCE hApplet;
|
extern HINSTANCE hApplet;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
BITMAPFILEHEADER *header;
|
||||||
|
BITMAPINFO *info;
|
||||||
|
BYTE *bits;
|
||||||
|
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
|
||||||
|
} DIBitmap;
|
||||||
|
|
||||||
|
extern DIBitmap *DibLoadImage(TCHAR *filename);
|
||||||
|
extern void DibFreeImage(DIBitmap *bitmap);
|
||||||
|
|
||||||
|
DWORD DbgPrint(PCH Format,...);
|
||||||
|
|
||||||
#endif /* __CPL_DESK_H__ */
|
#endif /* __CPL_DESK_H__ */
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,10 @@
|
||||||
<library>gdi32</library>
|
<library>gdi32</library>
|
||||||
<library>comctl32</library>
|
<library>comctl32</library>
|
||||||
<library>comdlg32</library>
|
<library>comdlg32</library>
|
||||||
|
<library>setupapi</library>
|
||||||
<library>shell32</library>
|
<library>shell32</library>
|
||||||
|
<library>ntdll</library>
|
||||||
|
<file>classinst.c</file>
|
||||||
<file>desk.c</file>
|
<file>desk.c</file>
|
||||||
<file>background.c</file>
|
<file>background.c</file>
|
||||||
<file>screensaver.c</file>
|
<file>screensaver.c</file>
|
||||||
|
@ -22,5 +25,4 @@
|
||||||
<file>settings.c</file>
|
<file>settings.c</file>
|
||||||
<file>dibitmap.c</file>
|
<file>dibitmap.c</file>
|
||||||
<file>desk.rc</file>
|
<file>desk.rc</file>
|
||||||
|
|
||||||
</module>
|
</module>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dibitmap.h"
|
#include "desk.h"
|
||||||
|
|
||||||
DIBitmap *DibLoadImage(TCHAR *filename)
|
DIBitmap *DibLoadImage(TCHAR *filename)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
|
|
||||||
#ifndef __DIBITMAP_H__
|
|
||||||
#define __DIBITMAP_H__
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
BITMAPFILEHEADER *header;
|
|
||||||
BITMAPINFO *info;
|
|
||||||
BYTE *bits;
|
|
||||||
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
|
|
||||||
} DIBitmap;
|
|
||||||
|
|
||||||
extern DIBitmap *DibLoadImage(TCHAR *filename);
|
|
||||||
extern void DibFreeImage(DIBitmap *bitmap);
|
|
||||||
|
|
||||||
#endif /* __DIBITMAP_H__ */
|
|
||||||
|
|
|
@ -8,12 +8,6 @@
|
||||||
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
* PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <commctrl.h>
|
|
||||||
|
|
||||||
#include "resource.h"
|
|
||||||
#include <cpl.h>
|
|
||||||
#include <tchar.h>
|
|
||||||
#include "desk.h"
|
#include "desk.h"
|
||||||
|
|
||||||
#define MAX_SCREENSAVERS 100
|
#define MAX_SCREENSAVERS 100
|
||||||
|
|
|
@ -9,13 +9,6 @@
|
||||||
* Hervé Poussineau (poussine@freesurf.fr)
|
* Hervé Poussineau (poussine@freesurf.fr)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <commctrl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <tchar.h>
|
|
||||||
#include <cpl.h>
|
|
||||||
|
|
||||||
#include "resource.h"
|
|
||||||
#include "desk.h"
|
#include "desk.h"
|
||||||
|
|
||||||
/* As slider control can't contain user data, we have to keep an
|
/* As slider control can't contain user data, we have to keep an
|
||||||
|
|
25
reactos/media/inf/display.inf
Normal file
25
reactos/media/inf/display.inf
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
; Display.INF
|
||||||
|
;
|
||||||
|
; Installation file for the Display class
|
||||||
|
;
|
||||||
|
[Version]
|
||||||
|
Signature = "$Windows NT$"
|
||||||
|
;Signature = "$ReactOS$"
|
||||||
|
LayoutFile = layout.inf
|
||||||
|
|
||||||
|
Class = Display
|
||||||
|
ClassGUID = {4d36e968-e325-11ce-bfc1-08002be10318}
|
||||||
|
Provider = %ReactOS%
|
||||||
|
DriverVer = 10/18/2005,1.00
|
||||||
|
|
||||||
|
[ClassInstall32.NT]
|
||||||
|
AddReg = DisplayClass.NT.AddReg
|
||||||
|
|
||||||
|
[DisplayClass.NT.AddReg]
|
||||||
|
HKR, , , 0, %DisplayClassName%
|
||||||
|
HKR, , Icon, 0, "-1"
|
||||||
|
HKR, , Installer32, 0, "desk.cpl,DisplayClassInstaller"
|
||||||
|
|
||||||
|
[Strings]
|
||||||
|
ReactOS = "ReactOS Team"
|
||||||
|
DisplayClassName = "Display Adapters"
|
|
@ -1,6 +1,7 @@
|
||||||
<group>
|
<group>
|
||||||
<installfile base="inf">acpi.inf</installfile>
|
<installfile base="inf">acpi.inf</installfile>
|
||||||
<installfile base="inf">cdrom.inf</installfile>
|
<installfile base="inf">cdrom.inf</installfile>
|
||||||
|
<installfile base="inf">display.inf</installfile>
|
||||||
<installfile base="inf">hdc.inf</installfile>
|
<installfile base="inf">hdc.inf</installfile>
|
||||||
<installfile base="inf">layout.inf</installfile>
|
<installfile base="inf">layout.inf</installfile>
|
||||||
<installfile base="inf">machine.inf</installfile>
|
<installfile base="inf">machine.inf</installfile>
|
||||||
|
|
|
@ -15,6 +15,7 @@ ClassGUID={00000000-0000-0000-0000-000000000000}
|
||||||
; MS uses netnovel.inf as class-installer INF for NICs
|
; MS uses netnovel.inf as class-installer INF for NICs
|
||||||
; we use a separate one to keep things clean
|
; we use a separate one to keep things clean
|
||||||
cdrom.inf
|
cdrom.inf
|
||||||
|
display.inf
|
||||||
hdc.inf
|
hdc.inf
|
||||||
machine.inf
|
machine.inf
|
||||||
mouse.inf
|
mouse.inf
|
||||||
|
|
Loading…
Reference in a new issue