ReactOS 0.4.15-dev-7846-g8ba6c66
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 412 of file newdev.c.

415{
416 return SearchDriverRecursive(DevInstData, pszDir);
417}
static BOOL SearchDriverRecursive(IN PDEVINSTDATA DevInstData, IN LPCWSTR Path)
Definition: newdev.c:342
_In_ LPCSTR pszDir
Definition: shellapi.h:584

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:30
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 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:1712
LONG_PTR LPARAM
Definition: windef.h:208
#define MAKEINTRESOURCE
Definition: winuser.h:591

Referenced by DevInstallW(), and InstallDevInstEx().

◆ InstallCurrentDriver()

BOOL InstallCurrentDriver ( IN PDEVINSTDATA  DevInstData)

Definition at line 529 of file newdev.c.

531{
532 BOOL ret;
533
534 TRACE("Installing driver %s: %s\n",
535 debugstr_w(DevInstData->drvInfoData.MfgName),
536 debugstr_w(DevInstData->drvInfoData.Description));
537
540 DevInstData->hDevInfo,
541 &DevInstData->devInfoData);
542 if (!ret)
543 {
544 TRACE("SetupDiCallClassInstaller(DIF_SELECTBESTCOMPATDRV) failed with error 0x%x\n", GetLastError());
545 return FALSE;
546 }
547
550 DevInstData->hDevInfo,
551 &DevInstData->devInfoData);
552 if (!ret)
553 {
554 TRACE("SetupDiCallClassInstaller(DIF_ALLOW_INSTALL) failed with error 0x%x\n", GetLastError());
555 return FALSE;
556 }
557
560 DevInstData->hDevInfo,
561 &DevInstData->devInfoData);
562 if (!ret)
563 {
564 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_PREANALYZE) failed with error 0x%x\n", GetLastError());
565 return FALSE;
566 }
567
570 DevInstData->hDevInfo,
571 &DevInstData->devInfoData);
572 if (!ret)
573 {
574 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_POSTANALYZE) failed with error 0x%x\n", GetLastError());
575 return FALSE;
576 }
577
580 DevInstData->hDevInfo,
581 &DevInstData->devInfoData);
582 if (!ret)
583 {
584 TRACE("SetupDiCallClassInstaller(DIF_INSTALLDEVICEFILES) failed with error 0x%x\n", GetLastError());
585 return FALSE;
586 }
587
590 DevInstData->hDevInfo,
591 &DevInstData->devInfoData);
592 if (!ret)
593 {
594 TRACE("SetupDiCallClassInstaller(DIF_REGISTER_COINSTALLERS) failed with error 0x%x\n", GetLastError());
595 return FALSE;
596 }
597
600 DevInstData->hDevInfo,
601 &DevInstData->devInfoData);
602 if (!ret)
603 {
604 TRACE("SetupDiCallClassInstaller(DIF_INSTALLINTERFACES) failed with error 0x%x\n", GetLastError());
605 return FALSE;
606 }
607
610 DevInstData->hDevInfo,
611 &DevInstData->devInfoData);
612 if (!ret)
613 {
614 TRACE("SetupDiCallClassInstaller(DIF_INSTALLDEVICE) failed with error 0x%x\n", GetLastError());
615 return FALSE;
616 }
617
620 DevInstData->hDevInfo,
621 &DevInstData->devInfoData);
622 if (!ret)
623 {
624 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_FINISHINSTALL) failed with error 0x%x\n", GetLastError());
625 return FALSE;
626 }
627
630 DevInstData->hDevInfo,
631 &DevInstData->devInfoData);
632 if (!ret)
633 {
634 TRACE("SetupDiCallClassInstaller(DIF_DESTROYPRIVATEDATA) failed with error 0x%x\n", GetLastError());
635 return FALSE;
636 }
637
638 return TRUE;
639}
#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:140
#define DIF_REGISTER_COINSTALLERS
Definition: setupapi.h:153
#define DIF_INSTALLINTERFACES
Definition: setupapi.h:151
#define DIF_NEWDEVICEWIZARD_PREANALYZE
Definition: setupapi.h:147
#define DIF_INSTALLDEVICE
Definition: setupapi.h:121
#define DIF_ALLOW_INSTALL
Definition: setupapi.h:143
#define DIF_DESTROYPRIVATEDATA
Definition: setupapi.h:131
#define DIF_SELECTBESTCOMPATDRV
Definition: setupapi.h:142
#define DIF_NEWDEVICEWIZARD_POSTANALYZE
Definition: setupapi.h:148
#define DIF_NEWDEVICEWIZARD_FINISHINSTALL
Definition: setupapi.h:149
#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 455 of file newdev.c.

460{
461 WCHAR drive[] = {'?',':',0};
462 DWORD dwDrives = 0;
463 DWORD i;
464 UINT nType;
465 DWORD CustomTextLength = 0;
468
469 /* Calculate length needed to store the search paths */
470 if (IncludeRemovableDevices)
471 {
472 dwDrives = GetLogicalDrives();
473 for (drive[0] = 'A', i = 1; drive[0] <= 'Z'; drive[0]++, i <<= 1)
474 {
475 if (dwDrives & i)
476 {
477 nType = GetDriveTypeW(drive);
478 if (nType == DRIVE_REMOVABLE || nType == DRIVE_CDROM)
479 {
480 LengthNeeded += 3;
481 }
482 }
483 }
484 }
485 if (IncludeCustomPath)
486 {
487 CustomTextLength = 1 + ComboBox_GetTextLength(hwndCombo);
488 LengthNeeded += CustomTextLength;
489 }
490
491 /* Allocate space for search paths */
492 HeapFree(GetProcessHeap(), 0, DevInstData->CustomSearchPath);
493 DevInstData->CustomSearchPath = Buffer = HeapAlloc(
495 0,
496 (LengthNeeded + 1) * sizeof(WCHAR));
497 if (!Buffer)
498 {
499 TRACE("HeapAlloc() failed\n");
501 return FALSE;
502 }
503
504 /* Fill search paths */
505 if (IncludeRemovableDevices)
506 {
507 for (drive[0] = 'A', i = 1; drive[0] <= 'Z'; drive[0]++, i <<= 1)
508 {
509 if (dwDrives & i)
510 {
511 nType = GetDriveTypeW(drive);
512 if (nType == DRIVE_REMOVABLE || nType == DRIVE_CDROM)
513 {
514 Buffer += 1 + swprintf(Buffer, drive);
515 }
516 }
517 }
518 }
519 if (IncludeCustomPath)
520 {
521 Buffer += 1 + GetWindowTextW(hwndCombo, Buffer, CustomTextLength);
522 }
523 *Buffer = '\0';
524
525 return TRUE;
526}
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:1412
DWORD WINAPI GetLogicalDrives(void)
Definition: disk.c:110
#define DRIVE_REMOVABLE
Definition: winbase.h:251
#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 420 of file newdev.c.

422{
423 BOOL result;
424
425 /* Search in default location */
426 result = SearchDriver(DevInstData, NULL, NULL);
427
428 if (DevInstData->CustomSearchPath)
429 {
430 /* Search only in specified paths */
431 /* We need to check all specified directories to be
432 * sure to find the best driver for the device.
433 */
435 for (Path = DevInstData->CustomSearchPath; *Path != '\0'; Path += wcslen(Path) + 1)
436 {
437 TRACE("Search driver in %s\n", debugstr_w(Path));
438 if (wcslen(Path) == 2 && Path[1] == ':')
439 {
440 if (SearchDriverRecursive(DevInstData, Path))
441 result = TRUE;
442 }
443 else
444 {
445 if (SearchDriver(DevInstData, Path, NULL))
446 result = TRUE;
447 }
448 }
449 }
450
451 return result;
452}
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:252
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.