1 /*
2  *  ReactOS INF Helper
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with this program; if not, write to the Free Software
16  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  *
18  * PROJECT:         INF Helper
19  * FILE:            infinst.c
20  * PURPOSE:         Pass INF files to setupapi.dll for execution
21  * PROGRAMMER:      Michael Biggins
22  * UPDATE HISTORY:
23  *                  Created 19/09/2004
24  */
25 #include <windows.h>
26 #include <tchar.h>
27 #include <stdio.h>
28 
29 #ifdef UNICODE
30 VOID WINAPI InstallHinfSectionW(HWND hwnd, HINSTANCE handle, LPCWSTR cmdline, INT show);
31 #define InstallHinfSection InstallHinfSectionW
32 #else
33 VOID WINAPI InstallHinfSectionA(HWND hwnd, HINSTANCE handle, LPCSTR cmdline, INT show);
34 #define InstallHinfSection InstallHinfSectionA
35 #endif
36 
37 #define FILEOPEN_FILTER	TEXT("Inf Files (*.inf)\0*.inf\0All Files (*.*)\0*.*\0\0")
38 #define FILEOPEN_TITLE	TEXT("INF file to process")
39 #define FILEOPEN_DEFEXT	TEXT(".inf")
40 #define INF_COMMAND	TEXT("DefaultInstall 128 %s")
41 
42 int
43 _tmain(int argc, TCHAR *argv[])
44 {
45 	TCHAR infCommand[MAX_PATH + 32];
46 
47 	if (argc <= 1)
48 	{
49 		TCHAR FileName[MAX_PATH + 1];
50 		OPENFILENAME ofc;
51 		int rv;
52 
53 		ZeroMemory(&ofc, sizeof(ofc));
54 		ZeroMemory(FileName, MAX_PATH + 1);
55 		ofc.lStructSize = sizeof(ofc);
56 		ofc.lpstrFilter = FILEOPEN_FILTER;
57 		ofc.nFilterIndex = 1;
58 		ofc.lpstrTitle = FILEOPEN_TITLE;
59 		ofc.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_PATHMUSTEXIST;
60 		ofc.lpstrDefExt = FILEOPEN_DEFEXT;
61 		ofc.lpstrFile = FileName;
62 		ofc.nMaxFile = sizeof(FileName) / sizeof(TCHAR);
63 
64 		rv = GetOpenFileName(&ofc);
65 
66 		if (rv == 0)
67 			return 1;
68 
69 		_stprintf(infCommand, INF_COMMAND, FileName);
70 	}
71 	else
72 	{
73 		if (_tcslen(argv[1]) > MAX_PATH)
74 		{
75 			MessageBox(NULL, TEXT("Command line too long to be a valid file name"), NULL, MB_OK | MB_ICONERROR);
76 			return 2; /* User error */
77 		}
78 		_stprintf(infCommand, INF_COMMAND, argv[1]);
79 	}
80 
81 	InstallHinfSection(NULL, NULL, infCommand, 0);
82 
83 	return 0;
84 }
85