ReactOS 0.4.16-dev-2110-ge3521eb
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:601

Referenced by BrowseCallbackProc().

◆ DisplayWizard()

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

Definition at line 1372 of file wizard.c.

1376{
1377 PROPSHEETHEADER psh = {0};
1379 PROPSHEETPAGE psp = {0};
1380 HRESULT hr = CoInitialize(NULL); /* for SHAutoComplete */
1381
1382 /* zero based index */
1383 startPage -= IDD_FIRSTPAGE;
1384
1385 /* Create the Welcome page */
1386 ZeroMemory(&psp, sizeof(PROPSHEETPAGE));
1387 psp.dwSize = sizeof(PROPSHEETPAGE);
1388 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1389 psp.hInstance = hDllInstance;
1390 psp.lParam = (LPARAM)DevInstData;
1391 psp.pszTitle = MAKEINTRESOURCE(DevInstData->bUpdate ? IDS_UPDATEWIZARDTITLE : IDS_INSTALLWIZARDTITLE);
1392 psp.pfnDlgProc = WelcomeDlgProc;
1393 psp.pszTemplate = MAKEINTRESOURCE(IDD_WELCOMEPAGE);
1395
1396 /* Create the Select Source page */
1397 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
1398 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_CHSOURCE_TITLE);
1399 psp.pfnDlgProc = CHSourceDlgProc;
1400 psp.pszTemplate = MAKEINTRESOURCE(IDD_CHSOURCE);
1402
1403 /* Create the Search driver page */
1404 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
1405 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_SEARCHDRV_TITLE);
1406 psp.pfnDlgProc = SearchDrvDlgProc;
1407 psp.pszTemplate = MAKEINTRESOURCE(IDD_SEARCHDRV);
1409
1410 /* Create the Install driver page */
1411 psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USETITLE;
1412 psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_INSTALLDRV_TITLE);
1413 psp.pfnDlgProc = InstallDrvDlgProc;
1414 psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLDRV);
1416
1417 /* Create the No driver page */
1418 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1419 psp.pfnDlgProc = NoDriverDlgProc;
1420 psp.pszTemplate = MAKEINTRESOURCE(IDD_NODRIVER);
1422
1423 /* Create the Install failed page */
1424 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1425 psp.pfnDlgProc = InstallFailedDlgProc;
1426 psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLFAILED);
1428
1429 /* Create the Need reboot page */
1430 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1431 psp.pfnDlgProc = NeedRebootDlgProc;
1432 psp.pszTemplate = MAKEINTRESOURCE(IDD_NEEDREBOOT);
1434
1435 /* Create the Finish page */
1436 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | PSP_USETITLE;
1437 psp.pfnDlgProc = FinishDlgProc;
1438 psp.pszTemplate = MAKEINTRESOURCE(IDD_FINISHPAGE);
1440
1441 /* Create the property sheet */
1442 psh.dwSize = sizeof(PROPSHEETHEADER);
1443 psh.dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER;
1444 psh.hInstance = hDllInstance;
1445 psh.hwndParent = hwndParent;
1446 psh.nPages = IDD_MAXIMUMPAGE + 1;
1447 psh.nStartPage = startPage;
1448 psh.phpage = ahpsp;
1449 psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);
1450 psh.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER);
1451
1452 /* Create title font */
1453 DevInstData->hTitleFont = CreateTitleFont();
1454
1455 /* Display the wizard */
1456 PropertySheet(&psh);
1457
1458 DeleteObject(DevInstData->hTitleFont);
1459
1460 if (SUCCEEDED(hr))
1462 return TRUE;
1463}
#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
#define ZeroMemory
Definition: minwinbase.h:31
LONG_PTR LPARAM
Definition: minwindef.h:175
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
static HFONT CreateTitleFont(VOID)
Definition: wizard.c:1347
static INT_PTR CALLBACK NoDriverDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:989
static INT_PTR CALLBACK NeedRebootDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:1189
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:1268
static INT_PTR CALLBACK InstallDrvDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:878
static INT_PTR CALLBACK SearchDrvDlgProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
Definition: wizard.c:783
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:1110
#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

Referenced by DevInstallW(), and InstallDevInstEx().

◆ InstallCurrentDriver()

BOOL InstallCurrentDriver ( IN PDEVINSTDATA  DevInstData)

Definition at line 541 of file newdev.c.

543{
544 BOOL ret;
545
546 TRACE("Installing driver %s: %s\n",
547 debugstr_w(DevInstData->drvInfoData.MfgName),
548 debugstr_w(DevInstData->drvInfoData.Description));
549
552 DevInstData->hDevInfo,
553 &DevInstData->devInfoData);
554 if (!ret)
555 {
556 TRACE("SetupDiCallClassInstaller(DIF_SELECTBESTCOMPATDRV) failed with error 0x%x\n", GetLastError());
557 return FALSE;
558 }
559
562 DevInstData->hDevInfo,
563 &DevInstData->devInfoData);
564 if (!ret)
565 {
566 TRACE("SetupDiCallClassInstaller(DIF_ALLOW_INSTALL) failed with error 0x%x\n", GetLastError());
567 return FALSE;
568 }
569
572 DevInstData->hDevInfo,
573 &DevInstData->devInfoData);
574 if (!ret)
575 {
576 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_PREANALYZE) failed with error 0x%x\n", GetLastError());
577 return FALSE;
578 }
579
582 DevInstData->hDevInfo,
583 &DevInstData->devInfoData);
584 if (!ret)
585 {
586 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_POSTANALYZE) failed with error 0x%x\n", GetLastError());
587 return FALSE;
588 }
589
592 DevInstData->hDevInfo,
593 &DevInstData->devInfoData);
594 if (!ret)
595 {
596 TRACE("SetupDiCallClassInstaller(DIF_INSTALLDEVICEFILES) failed with error 0x%x\n", GetLastError());
597 return FALSE;
598 }
599
602 DevInstData->hDevInfo,
603 &DevInstData->devInfoData);
604 if (!ret)
605 {
606 TRACE("SetupDiCallClassInstaller(DIF_REGISTER_COINSTALLERS) failed with error 0x%x\n", GetLastError());
607 return FALSE;
608 }
609
612 DevInstData->hDevInfo,
613 &DevInstData->devInfoData);
614 if (!ret)
615 {
616 TRACE("SetupDiCallClassInstaller(DIF_INSTALLINTERFACES) failed with error 0x%x\n", GetLastError());
617 return FALSE;
618 }
619
622 DevInstData->hDevInfo,
623 &DevInstData->devInfoData);
624 if (!ret)
625 {
626 TRACE("SetupDiCallClassInstaller(DIF_INSTALLDEVICE) failed with error 0x%x\n", GetLastError());
627 return FALSE;
628 }
629
632 DevInstData->hDevInfo,
633 &DevInstData->devInfoData);
634 if (!ret)
635 {
636 TRACE("SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_FINISHINSTALL) failed with error 0x%x\n", GetLastError());
637 return FALSE;
638 }
639
642 DevInstData->hDevInfo,
643 &DevInstData->devInfoData);
644 if (!ret)
645 {
646 TRACE("SetupDiCallClassInstaller(DIF_DESTROYPRIVATEDATA) failed with error 0x%x\n", GetLastError());
647 return FALSE;
648 }
649
650 return TRUE;
651}
#define FALSE
Definition: types.h:117
BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION InstallFunction, HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData)
Definition: devinst.c:4024
return ret
Definition: mutex.c:146
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
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 INT idx = (INT)SendMessageW(hwndCombo, CB_GETCURSEL, 0, 0);
477
478 /* Calculate length needed to store the search paths */
479 if (IncludeRemovableDevices)
480 {
481 dwDrives = GetLogicalDrives();
482 for (drive[0] = 'A', i = 1; drive[0] <= 'Z'; drive[0]++, i <<= 1)
483 {
484 if (dwDrives & i)
485 {
486 nType = GetDriveTypeW(drive);
487 if (nType == DRIVE_REMOVABLE || nType == DRIVE_CDROM)
488 {
489 LengthNeeded += 3;
490 }
491 }
492 }
493 }
494 if (IncludeCustomPath)
495 {
496 CustomTextLength = 1 + ((idx != CB_ERR) ?
497 (INT)SendMessageW(hwndCombo, CB_GETLBTEXTLEN, idx, 0) : ComboBox_GetTextLength(hwndCombo));
498 LengthNeeded += CustomTextLength;
499 }
500
501 /* Allocate space for search paths */
502 HeapFree(GetProcessHeap(), 0, DevInstData->CustomSearchPath);
503 DevInstData->CustomSearchPath = Buffer = HeapAlloc(
505 0,
506 (LengthNeeded + 1) * sizeof(WCHAR));
507 if (!Buffer)
508 {
509 TRACE("HeapAlloc() failed\n");
511 return FALSE;
512 }
513
514 /* Fill search paths */
515 if (IncludeRemovableDevices)
516 {
517 for (drive[0] = 'A', i = 1; drive[0] <= 'Z'; drive[0]++, i <<= 1)
518 {
519 if (dwDrives & i)
520 {
521 nType = GetDriveTypeW(drive);
522 if (nType == DRIVE_REMOVABLE || nType == DRIVE_CDROM)
523 {
524 Buffer += 1 + swprintf(Buffer, drive);
525 }
526 }
527 }
528 }
529 if (IncludeCustomPath)
530 {
531 Buffer += 1 + ((idx != CB_ERR) ?
532 SendMessageW(hwndCombo, CB_GETLBTEXT, idx, (LPARAM)Buffer) :
533 GetWindowTextW(hwndCombo, Buffer, CustomTextLength));
534 }
535 *Buffer = '\0';
536
537 return TRUE;
538}
Definition: bufpool.h:45
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
unsigned int idx
Definition: utils.c:41
#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
DWORD WINAPI DECLSPEC_HOTPATCH GetLogicalDrives(void)
Definition: volume.c:513
#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
#define INT
Definition: polytest.cpp:20
int32_t INT
Definition: typedefs.h:58
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1382
#define DRIVE_REMOVABLE
Definition: winbase.h:275
#define ComboBox_GetTextLength(hwndCtl)
Definition: windowsx.h:59
#define CB_GETLBTEXTLEN
Definition: winuser.h:1982
#define CB_GETLBTEXT
Definition: winuser.h:1981
#define CB_ERR
Definition: winuser.h:2471
#define CB_GETCURSEL
Definition: winuser.h:1972
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__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
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2983
GLuint64EXT * result
Definition: glext.h:11304
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.