/* * ReactOS INF Helper * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * PROJECT: INF Helper * FILE: infinst.c * PURPOSE: Pass INF files to setupapi.dll for execution * PROGRAMMER: Michael Biggins * UPDATE HISTORY: * Created 19/09/2004 */ #include #include #include #ifdef UNICODE VOID WINAPI InstallHinfSectionW(HWND hwnd, HINSTANCE handle, LPCWSTR cmdline, INT show); #define InstallHinfSection InstallHinfSectionW #else VOID WINAPI InstallHinfSectionA(HWND hwnd, HINSTANCE handle, LPCSTR cmdline, INT show); #define InstallHinfSection InstallHinfSectionA #endif #define FILEOPEN_FILTER TEXT("Inf Files (*.inf)\0*.inf\0All Files (*.*)\0*.*\0\0") #define FILEOPEN_TITLE TEXT("INF file to process") #define FILEOPEN_DEFEXT TEXT(".inf") #define INF_COMMAND TEXT("DefaultInstall 128 %s") int _tmain(int argc, TCHAR *argv[]) { TCHAR infCommand[MAX_PATH + 32]; if (argc <= 1) { TCHAR FileName[MAX_PATH + 1]; OPENFILENAME ofc; int rv; ZeroMemory(&ofc, sizeof(ofc)); ZeroMemory(FileName, MAX_PATH + 1); ofc.lStructSize = sizeof(ofc); ofc.lpstrFilter = FILEOPEN_FILTER; ofc.nFilterIndex = 1; ofc.lpstrTitle = FILEOPEN_TITLE; ofc.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_PATHMUSTEXIST; ofc.lpstrDefExt = FILEOPEN_DEFEXT; ofc.lpstrFile = FileName; ofc.nMaxFile = sizeof(FileName) / sizeof(TCHAR); rv = GetOpenFileName(&ofc); if (rv == 0) return 1; _stprintf(infCommand, INF_COMMAND, FileName); } else { if (_tcslen(argv[1]) > MAX_PATH) { MessageBox(NULL, TEXT("Command line too long to be a valid file name"), NULL, MB_OK | MB_ICONERROR); return 2; /* User error */ } _stprintf(infCommand, INF_COMMAND, argv[1]); } InstallHinfSection(NULL, NULL, infCommand, 0); return 0; }