ReactOS 0.4.16-dev-1025-gd3456f5
newdev_private.h File Reference
#include <stdarg.h>
#include <windef.h>
#include <winbase.h>
#include <winreg.h>
#include <wingdi.h>
#include <winuser.h>
#include <windowsx.h>
#include <newdev.h>
#include <regstr.h>
#include <dll/newdevp.h>
#include <wine/debug.h>
#include "resource.h"
Include dependency graph for newdev_private.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _DEVINSTDATA
 

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COM_NO_WINDOWS_H
 
#define COBJMACROS
 
#define WM_SEARCH_FINISHED   (WM_USER + 10)
 
#define WM_INSTALL_FINISHED   (WM_USER + 11)
 

Typedefs

typedef struct _DEVINSTDATA DEVINSTDATA
 
typedef struct _DEVINSTDATAPDEVINSTDATA
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (newdev)
 
BOOL ScanFoldersForDriver (IN PDEVINSTDATA DevInstData)
 
BOOL PrepareFoldersToScan (IN PDEVINSTDATA DevInstData, IN BOOL IncludeRemovableDevices, IN BOOL IncludeCustomPath, IN HWND hwndCombo OPTIONAL)
 
BOOL InstallCurrentDriver (IN PDEVINSTDATA DevInstData)
 
BOOL CheckBestDriver (_In_ PDEVINSTDATA DevInstData, _In_ PCWSTR pszDir)
 
BOOL DisplayWizard (IN PDEVINSTDATA DevInstData, IN HWND hwndParent, IN UINT startPage)
 

Variables

HINSTANCE hDllInstance
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 7 of file newdev_private.h.

◆ COBJMACROS

#define COBJMACROS

Definition at line 10 of file newdev_private.h.

◆ COM_NO_WINDOWS_H

#define COM_NO_WINDOWS_H

Definition at line 8 of file newdev_private.h.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 6 of file newdev_private.h.

◆ WM_INSTALL_FINISHED

#define WM_INSTALL_FINISHED   (WM_USER + 11)

Definition at line 45 of file newdev_private.h.

◆ WM_SEARCH_FINISHED

#define WM_SEARCH_FINISHED   (WM_USER + 10)

Definition at line 44 of file newdev_private.h.

Typedef Documentation

◆ DEVINSTDATA

◆ PDEVINSTDATA

Function Documentation

◆ CheckBestDriver()

BOOL CheckBestDriver ( _In_ PDEVINSTDATA  DevInstData,
_In_ PCWSTR  pszDir 
)

Definition at line 420 of file newdev.c.

423{
424 return SearchDriverRecursive(DevInstData, pszDir);
425}
static BOOL SearchDriverRecursive(IN PDEVINSTDATA DevInstData, IN LPCWSTR Path)
Definition: newdev.c:350
_In_ LPCSTR pszDir
Definition: shellapi.h:585

Referenced by BrowseCallbackProc().

◆ DisplayWizard()

BOOL DisplayWizard ( IN PDEVINSTDATA  DevInstData,
IN HWND  hwndParent,
IN UINT  startPage 
)

Definition at line 1378 of file wizard.c.

1382{
1383 PROPSHEETHEADER psh = {0};
1385 PROPSHEETPAGE psp = {0};
1386 HRESULT hr = CoInitialize(NULL); /* for SHAutoComplete */
1387
1388 /* zero based index */
1389 startPage -= IDD_FIRSTPAGE;
1390
1391 /* Create the Welcome page */
1392 ZeroMemory(&psp, sizeof(PROPSHEETPAGE));
1393 psp.dwSize = sizeof(PROPSHEETPAGE);
1394 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1395 psp.hInstance = hDllInstance;
1396 psp.lParam = (LPARAM)DevInstData;
1397 psp.pszTitle = MAKEINTRESOURCE(DevInstData->bUpdate ? IDS_UPDATEWIZARDTITLE : IDS_INSTALLWIZARDTITLE);
1398 psp.pfnDlgProc = WelcomeDlgProc;
1399 psp.pszTemplate = MAKEINTRESOURCE(IDD_WELCOMEPAGE);
1401
1402 /* Create the Select Source page */
1403 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
1404 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_CHSOURCE_TITLE);
1405 psp.pfnDlgProc = CHSourceDlgProc;
1406 psp.pszTemplate = MAKEINTRESOURCE(IDD_CHSOURCE);
1408
1409 /* Create the Search driver page */
1410 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
1411 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_SEARCHDRV_TITLE);
1412 psp.pfnDlgProc = SearchDrvDlgProc;
1413 psp.pszTemplate = MAKEINTRESOURCE(IDD_SEARCHDRV);
1415
1416 /* Create the Install driver page */
1417 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
1418 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_INSTALLDRV_TITLE);
1419 psp.pfnDlgProc = InstallDrvDlgProc;
1420 psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLDRV);
1422
1423 /* Create the No driver page */
1424 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1425 psp.pfnDlgProc = NoDriverDlgProc;
1426 psp.pszTemplate = MAKEINTRESOURCE(IDD_NODRIVER);
1428
1429 /* Create the Install failed page */
1430 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1431 psp.pfnDlgProc = InstallFailedDlgProc;
1432 psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLFAILED);
1434
1435 /* Create the Need reboot page */
1436 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1437 psp.pfnDlgProc = NeedRebootDlgProc;
1438 psp.pszTemplate = MAKEINTRESOURCE(IDD_NEEDREBOOT);
1440
1441 /* Create the Finish page */
1442 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1443 psp.pfnDlgProc = FinishDlgProc;
1444 psp.pszTemplate = MAKEINTRESOURCE(IDD_FINISHPAGE);
1446
1447 /* Create the property sheet */
1448 psh.dwSize = sizeof(PROPSHEETHEADER);
1449 psh.dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER;
1450 psh.hInstance = hDllInstance;
1451 psh.hwndParent = hwndParent;
1452 psh.nPages = IDD_MAXIMUMPAGE + 1;
1453 psh.nStartPage = startPage;
1454 psh.phpage = ahpsp;
1455 psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);
1456 psh.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER);
1457
1458 /* Create title font */
1459 DevInstData->hTitleFont = CreateTitleFont();
1460
1461 /* Display the wizard */
1462 PropertySheet(&psh);
1463
1464 DeleteObject(DevInstData->hTitleFont);
1465
1466 if (SUCCEEDED(hr))
1468 return TRUE;
1469}
#define IDB_HEADER
Definition: resource.h:30
#define IDB_WATERMARK
Definition: resource.h:4
static HINSTANCE hDllInstance
Definition: clb.c:9
static HWND hwndParent
Definition: cryptui.c:300
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define IDD_FINISHPAGE
Definition: resource.h:34
#define IDD_CHSOURCE
Definition: resource.h:22
#define IDS_CHSOURCE_TITLE
Definition: resource.h:34
#define IDD_SEARCHDRV
Definition: resource.h:23
#define IDS_SEARCHDRV_TITLE
Definition: resource.h:35
#define IDD_INSTALLDRV
Definition: resource.h:24
#define IDD_FIRSTPAGE
Definition: resource.h:29
#define IDD_NODRIVER
Definition: resource.h:25
#define IDS_INSTALLDRV_TITLE
Definition: resource.h:36
#define IDD_WELCOMEPAGE
Definition: resource.h:21
#define IDS_INSTALLWIZARDTITLE
Definition: resource.h:32
#define IDD_INSTALLFAILED
Definition: resource.h:26
#define IDD_MAXIMUMPAGE
Definition: resource.h:30
#define IDD_NEEDREBOOT
Definition: resource.h:27
#define IDS_UPDATEWIZARDTITLE
Definition: resource.h:33
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
pKey DeleteObject()
#define SUCCEEDED(hr)
Definition: intsafe.h:50
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
static HFONT CreateTitleFont(VOID)
Definition: wizard.c:1353
static INT_PTR CALLBACK NoDriverDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:995
static INT_PTR CALLBACK NeedRebootDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:1195
static INT_PTR CALLBACK WelcomeDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:469
static INT_PTR CALLBACK FinishDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:1274
static INT_PTR CALLBACK InstallDrvDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:884
static INT_PTR CALLBACK SearchDrvDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:789
static INT_PTR CALLBACK CHSourceDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:615
static INT_PTR CALLBACK InstallFailedDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:1116
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#define PROPSHEETHEADER
Definition: prsht.h:392
#define CreatePropertySheetPage
Definition: prsht.h:399
#define PSP_USETITLE
Definition: prsht.h:26
#define PSP_DEFAULT
Definition: prsht.h:22
#define PropertySheet
Definition: prsht.h:400
#define PROPSHEETPAGE
Definition: prsht.h:389
HRESULT hr
Definition: shlfolder.c:183
#define ZeroMemory
Definition: winbase.h:1743
LONG_PTR LPARAM
Definition: windef.h:208

Referenced by DevInstallW(), and InstallDevInstEx().

◆ InstallCurrentDriver()

BOOL InstallCurrentDriver ( IN PDEVINSTDATA  DevInstData)

Definition at line 537 of file newdev.c.

539{
540 BOOL ret;
541
542 TRACE("Installing driver %s: %s\n",
543 debugstr_w(DevInstData->drvInfoData.MfgName),
544 debugstr_w(DevInstData->drvInfoData.Description));
545
548 DevInstData->hDevInfo,
549 &DevInstData->devInfoData);
550 if (!ret)
551 {
552 TRACE("SetupDiCallClassInstaller(DIF_SELECTBESTCOMPATDRV) failed with error 0x%x\n", GetLastError());
553 return FALSE;
554 }
555
558 DevInstData->hDevInfo,
559 &DevInstData->devInfoData);
560 if (!ret)
561 {
562 TRACE("SetupDiCallClassInstaller(DIF_ALLOW_INSTALL) failed with error 0x%x\n", GetLastError());
563 return FALSE;
564 }
565
568 DevInstData->hDevInfo,
569 &DevInstData->devInfoData);
570 if (!ret)
571 {
572 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_PREANALYZE) failed with error 0x%x\n", GetLastError());
573 return FALSE;
574 }
575
578 DevInstData->hDevInfo,
579 &DevInstData->devInfoData);
580 if (!ret)
581 {
582 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_POSTANALYZE) failed with error 0x%x\n", GetLastError());
583 return FALSE;
584 }
585
588 DevInstData->hDevInfo,
589 &DevInstData->devInfoData);
590 if (!ret)
591 {
592 TRACE("SetupDiCallClassInstaller(DIF_INSTALLDEVICEFILES) failed with error 0x%x\n", GetLastError());
593 return FALSE;
594 }
595
598 DevInstData->hDevInfo,
599 &DevInstData->devInfoData);
600 if (!ret)
601 {
602 TRACE("SetupDiCallClassInstaller(DIF_REGISTER_COINSTALLERS) failed with error 0x%x\n", GetLastError());
603 return FALSE;
604 }
605
608 DevInstData->hDevInfo,
609 &DevInstData->devInfoData);
610 if (!ret)
611 {
612 TRACE("SetupDiCallClassInstaller(DIF_INSTALLINTERFACES) failed with error 0x%x\n", GetLastError());
613 return FALSE;
614 }
615
618 DevInstData->hDevInfo,
619 &DevInstData->devInfoData);
620 if (!ret)
621 {
622 TRACE("SetupDiCallClassInstaller(DIF_INSTALLDEVICE) failed with error 0x%x\n", GetLastError());
623 return FALSE;
624 }
625
628 DevInstData->hDevInfo,
629 &DevInstData->devInfoData);
630 if (!ret)
631 {
632 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_FINISHINSTALL) failed with error 0x%x\n", GetLastError());
633 return FALSE;
634 }
635
638 DevInstData->hDevInfo,
639 &DevInstData->devInfoData);
640 if (!ret)
641 {
642 TRACE("SetupDiCallClassInstaller(DIF_DESTROYPRIVATEDATA) failed with error 0x%x\n", GetLastError());
643 return FALSE;
644 }
645
646 return TRUE;
647}
#define FALSE
Definition: types.h:117
BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION InstallFunction, HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData)
Definition: devinst.c:4024
unsigned int BOOL
Definition: ntddk_ex.h:94
#define debugstr_w
Definition: kernel32.h:32
#define DIF_INSTALLDEVICEFILES
Definition: setupapi.h:141
#define DIF_REGISTER_COINSTALLERS
Definition: setupapi.h:154
#define DIF_INSTALLINTERFACES
Definition: setupapi.h:152
#define DIF_NEWDEVICEWIZARD_PREANALYZE
Definition: setupapi.h:148
#define DIF_INSTALLDEVICE
Definition: setupapi.h:122
#define DIF_ALLOW_INSTALL
Definition: setupapi.h:144
#define DIF_DESTROYPRIVATEDATA
Definition: setupapi.h:132
#define DIF_SELECTBESTCOMPATDRV
Definition: setupapi.h:143
#define DIF_NEWDEVICEWIZARD_POSTANALYZE
Definition: setupapi.h:149
#define DIF_NEWDEVICEWIZARD_FINISHINSTALL
Definition: setupapi.h:150
#define TRACE(s)
Definition: solgame.cpp:4
int ret
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

Referenced by DevInstallW(), InstallDriverProc(), and UpdateDriverForPlugAndPlayDevicesW().

◆ PrepareFoldersToScan()

BOOL PrepareFoldersToScan ( IN PDEVINSTDATA  DevInstData,
IN BOOL  IncludeRemovableDevices,
IN BOOL  IncludeCustomPath,
IN HWND hwndCombo  OPTIONAL 
)

Definition at line 463 of file newdev.c.

468{
469 WCHAR drive[] = {'?',':',0};
470 DWORD dwDrives = 0;
471 DWORD i;
472 UINT nType;
473 DWORD CustomTextLength = 0;
476
477 /* Calculate length needed to store the search paths */
478 if (IncludeRemovableDevices)
479 {
480 dwDrives = GetLogicalDrives();
481 for (drive[0] = 'A', i = 1; drive[0] <= 'Z'; drive[0]++, i <<= 1)
482 {
483 if (dwDrives & i)
484 {
485 nType = GetDriveTypeW(drive);
486 if (nType == DRIVE_REMOVABLE || nType == DRIVE_CDROM)
487 {
488 LengthNeeded += 3;
489 }
490 }
491 }
492 }
493 if (IncludeCustomPath)
494 {
495 CustomTextLength = 1 + ComboBox_GetTextLength(hwndCombo);
496 LengthNeeded += CustomTextLength;
497 }
498
499 /* Allocate space for search paths */
500 HeapFree(GetProcessHeap(), 0, DevInstData->CustomSearchPath);
501 DevInstData->CustomSearchPath = Buffer = HeapAlloc(
503 0,
504 (LengthNeeded + 1) * sizeof(WCHAR));
505 if (!Buffer)
506 {
507 TRACE("HeapAlloc() failed\n");
509 return FALSE;
510 }
511
512 /* Fill search paths */
513 if (IncludeRemovableDevices)
514 {
515 for (drive[0] = 'A', i = 1; drive[0] <= 'Z'; drive[0]++, i <<= 1)
516 {
517 if (dwDrives & i)
518 {
519 nType = GetDriveTypeW(drive);
520 if (nType == DRIVE_REMOVABLE || nType == DRIVE_CDROM)
521 {
522 Buffer += 1 + swprintf(Buffer, drive);
523 }
524 }
525 }
526 }
527 if (IncludeCustomPath)
528 {
529 Buffer += 1 + GetWindowTextW(hwndCombo, Buffer, CustomTextLength);
530 }
531 *Buffer = '\0';
532
533 return TRUE;
534}
Definition: bufpool.h:45
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define GetProcessHeap()
Definition: compat.h:736
#define SetLastError(x)
Definition: compat.h:752
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497
#define swprintf
Definition: precomp.h:40
unsigned long DWORD
Definition: ntddk_ex.h:95
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ SECURITY_INFORMATION _In_ ULONG _Out_opt_ PULONG LengthNeeded
Definition: fltkernel.h:1343
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define DRIVE_CDROM
Definition: machpc98.h:119
unsigned int UINT
Definition: ndis.h:50
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1394
DWORD WINAPI GetLogicalDrives(void)
Definition: disk.c:110
#define DRIVE_REMOVABLE
Definition: winbase.h:277
#define ComboBox_GetTextLength(hwndCtl)
Definition: windowsx.h:59
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CHSourceDlgProc(), DevInstallW(), and WelcomeDlgProc().

◆ ScanFoldersForDriver()

BOOL ScanFoldersForDriver ( IN PDEVINSTDATA  DevInstData)

Definition at line 428 of file newdev.c.

430{
431 BOOL result;
432
433 /* Search in default location */
434 result = SearchDriver(DevInstData, NULL, NULL);
435
436 if (DevInstData->CustomSearchPath)
437 {
438 /* Search only in specified paths */
439 /* We need to check all specified directories to be
440 * sure to find the best driver for the device.
441 */
443 for (Path = DevInstData->CustomSearchPath; *Path != '\0'; Path += wcslen(Path) + 1)
444 {
445 TRACE("Search driver in %s\n", debugstr_w(Path));
446 if (wcslen(Path) == 2 && Path[1] == ':')
447 {
448 if (SearchDriverRecursive(DevInstData, Path))
449 result = TRUE;
450 }
451 else
452 {
453 if (SearchDriver(DevInstData, Path, NULL))
454 result = TRUE;
455 }
456 }
457 }
458
459 return result;
460}
PRTL_UNICODE_STRING_BUFFER Path
GLuint64EXT * result
Definition: glext.h:11304
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static BOOL SearchDriver(IN PDEVINSTDATA DevInstData, IN LPCWSTR Directory OPTIONAL, IN LPCWSTR InfFile OPTIONAL)
Definition: newdev.c:260
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by DevInstallW(), and FindDriverProc().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( newdev  )

Variable Documentation

◆ hDllInstance

HINSTANCE hDllInstance
extern

Definition at line 17 of file browser.c.