29static const WCHAR GroupOrderListKey[] = {
'S',
'Y',
'S',
'T',
'E',
'M',
'\\',
'C',
'u',
'r',
'r',
'e',
'n',
't',
'C',
'o',
'n',
't',
'r',
'o',
'l',
'S',
'e',
't',
'\\',
'C',
'o',
'n',
't',
'r',
'o',
'l',
'\\',
'G',
'r',
'o',
'u',
'p',
'O',
'r',
'd',
'e',
'r',
'L',
'i',
's',
't',0};
32static const WCHAR OemFileSpecification[] = {
'o',
'e',
'm',
'%',
'l',
'u',
'.',
'i',
'n',
'f',0};
36static const WCHAR DependenciesKey[] = {
'D',
'e',
'p',
'e',
'n',
'd',
'e',
'n',
'c',
'i',
'e',
's',0};
37static const WCHAR DescriptionKey[] = {
'D',
'e',
's',
'c',
'r',
'i',
'p',
't',
'i',
'o',
'n',0};
38static const WCHAR DisplayNameKey[] = {
'D',
'i',
's',
'p',
'l',
'a',
'y',
'N',
'a',
'm',
'e',0};
39static const WCHAR ErrorControlKey[] = {
'E',
'r',
'r',
'o',
'r',
'C',
'o',
'n',
't',
'r',
'o',
'l',0};
40static const WCHAR LoadOrderGroupKey[] = {
'L',
'o',
'a',
'd',
'O',
'r',
'd',
'e',
'r',
'G',
'r',
'o',
'u',
'p',0};
42static const WCHAR ServiceBinaryKey[] = {
'S',
'e',
'r',
'v',
'i',
'c',
'e',
'B',
'i',
'n',
'a',
'r',
'y',0};
43static const WCHAR ServiceTypeKey[] = {
'S',
'e',
'r',
'v',
'i',
'c',
'e',
'T',
'y',
'p',
'e',0};
50static const WCHAR WorkingDir[] = {
'W',
'o',
'r',
'k',
'i',
'n',
'g',
'D',
'i',
'r',0};
55static const WCHAR DisplayResource[] = {
'D',
'i',
's',
'p',
'l',
'a',
'y',
'R',
'e',
's',
'o',
'u',
'r',
'c',
'e',0};
106static const WCHAR AddService[] = {
'A',
'd',
'd',
'S',
'e',
'r',
'v',
'i',
'c',
'e',0};
115static const WCHAR UpdateInis[] = {
'U',
'p',
'd',
'a',
't',
'e',
'I',
'n',
'i',
's',0};
117static const WCHAR UpdateIniFields[] = {
'U',
'p',
'd',
'a',
't',
'e',
'I',
'n',
'i',
'F',
'i',
'e',
'l',
'd',
's',0};
118static const WCHAR RegisterDlls[] = {
'R',
'e',
'g',
'i',
's',
't',
'e',
'r',
'D',
'l',
'l',
's',0};
119static const WCHAR UnregisterDlls[] = {
'U',
'n',
'r',
'e',
'g',
'i',
's',
't',
'e',
'r',
'D',
'l',
'l',
's',0};
120static const WCHAR ProfileItems[] = {
'P',
'r',
'o',
'f',
'i',
'l',
'e',
'I',
't',
'e',
'm',
's',0};
125static const WCHAR WineFakeDlls[] = {
'W',
'i',
'n',
'e',
'F',
'a',
'k',
'e',
'D',
'l',
'l',
's',0};
203 static const WCHAR HKCR[] = {
'H',
'K',
'C',
'R',0};
204 static const WCHAR HKCU[] = {
'H',
'K',
'C',
'U',0};
205 static const WCHAR HKLM[] = {
'H',
'K',
'L',
'M',0};
206 static const WCHAR HKU[] = {
'H',
'K',
'U',0};
207 static const WCHAR HKR[] = {
'H',
'K',
'R',0};
315 if ((
flags & FLG_DELREG_MULTI_SZ_DELSTRING) == FLG_DELREG_MULTI_SZ_DELSTRING)
425 LPWSTR security_key, security_descriptor;
452 if (!security_descriptor)
460 MyFree( security_descriptor );
500 sd ? &security_attributes :
NULL, &hkey,
NULL ))
573 static const WCHAR format[] = {
'"',
'%',
's',
'"',
' ',
'%',
's',0};
574 static const WCHAR default_args[] = {
'/',
'R',
'e',
'g',
'S',
'e',
'r',
'v',
'e',
'r',0};
607 const char *entry_point =
info->unregister ?
"DllUnregisterServer" :
"DllRegisterServer";
640 TRACE(
"calling DllInstall(%d,%s) in %s\n",
689 if (
p ==
path ||
p[-1] !=
'\\') *
p++ =
'\\';
744 if (
p ==
path ||
p[-1] !=
'\\') *
p++ =
'\\';
841 DWORD dwRequired = 0;
849 dwRequired +=
wcslen(Dir) + 1;
853 dwRequired +=
wcslen(SubDirPart) + 1;
855 dwRequired +=
wcslen(NamePart);
898 INT LinkAttributes = 0;
909 INT DisplayResId = 0;
921 TRACE(
"hInf %p, SectionName %s, Arg %p\n",
953 if (!
Concatenate(FileDirId, FileSubDir, NamePart, &FullFileName))
999 if (!
Concatenate(DirId, SubDirPart, NamePart, &FullIconName))
1003 SubDirPart = NamePart =
NULL;
1039 TRACE(
"Display %s, %d\n", DisplayName, DisplayResId);
1049 if (!pCoCreateInstance)
1052 if (!pCoUninitialize)
1056 hr = pCoInitialize(
NULL);
1065 hr = pCoCreateInstance(&CLSID_ShellLink,
NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkW, (
LPVOID*)&psl);
1069 hr = IShellLinkW_SetPath(psl, FullFileName);
1071 hr = IShellLinkW_SetArguments(psl,
L"");
1073 hr = IShellLinkW_SetWorkingDirectory(psl, FullWorkingDir);
1075 hr = IShellLinkW_SetIconLocation(psl, FullIconName, IconIdx);
1077 FIXME(
"Need to store hotkey %s in shell link\n",
debugstr_w(lpHotKey));
1079 hr = IShellLinkW_SetDescription(psl, lpInfoTip);
1081 FIXME(
"Need to store display name %s, %d in shell link\n",
debugstr_w(DisplayName), DisplayResId);
1088 ((LinkSubDir !=
NULL) ?
wcslen(LinkSubDir) : 0) +
1096 FIXME(
"Need to handle FLG_PROFITEM_DELETE and FLG_PROFITEM_GROUP\n");
1108 if (FullLinkName[
wcslen(FullLinkName) - 1] !=
'\\')
1112 wcscat(FullLinkName, LinkSubDir);
1113 if (FullLinkName[
wcslen(FullLinkName) - 1] !=
'\\')
1118 wcscat(FullLinkName, LinkName);
1121 hr = IPersistFile_Save(ppf, FullLinkName,
TRUE);
1126 IPersistFile_Release(ppf);
1129 IShellLinkW_Release(psl);
1177 WCHAR static_buffer[200];
1193 WARN(
"callback failed for %s %s err %d\n",
1251 info.layout = hlayout;
1281 &
ctx, devinfo, devinfo_data );
1321 ERR(
"Unknown info type %u\n",
info->type);
1339 needs_info.
type = 0;
1356 BOOL use_custom_queue;
1370 if (!use_custom_queue)
1400 if (
flags & SPINST_REGISTERCALLBACKAWARE)
1420 if (
flags & SPINST_REGISTERCALLBACKAWARE)
1434 info.default_root = key_root;
1452 if (
flags & SPINST_COPYINF)
1473 DWORD SectionNameLength;
1484 while (*
s ==
' ')
s++;
1489 while (*
s ==
' ')
s++;
1494 FIXME(
"default path of the installation not changed\n");
1509 WARN(
"SetupDiGetActualSectionToInstallW() failed (Error %u)\n",
GetLastError());
1540 WARN(
"SetupInstallServicesFromInfSectionW() failed (Error %u)\n",
GetLastError());
1545 bRebootRequired =
TRUE;
1557 SHTDN_REASON_MINOR_INSTALLATION | SHTDN_REASON_FLAG_PLANNED);
1565 if (bRebootRequired)
1568 SHTDN_REASON_MINOR_INSTALLATION | SHTDN_REASON_FLAG_PLANNED);
1573 if (bRebootRequired)
1588#ifdef CORE_11689_IS_FIXED
1744 DWORD RosDirLength, ServiceLength, Win32Length;
1747 RosDirLength =
strlenW(ReactOSDir);
1748 ServiceLength =
strlenW(*ServiceBinary);
1755 if (ServiceLength < RosDirLength)
1758 if (!
wcsnicmp(*ServiceBinary, ReactOSDir, RosDirLength))
1761 MoveMemory(*ServiceBinary, *ServiceBinary + RosDirLength + 1,
1762 (ServiceLength - RosDirLength) *
sizeof(
WCHAR));
1767 Win32Length = (ServiceLength - RosDirLength) *
sizeof(
WCHAR)
1768 -
sizeof(
L'\\') +
sizeof(
L"%SystemRoot%\\");
1788 SC_HANDLE hService =
NULL;
1804 INT ServiceType, StartType, ErrorControl;
1848 if (!LoadOrderGroup || !*LoadOrderGroup)
1865 if (hService ==
NULL)
1878 useTag ? &tagId :
NULL,
1882 if (hService ==
NULL)
1902 tagId = ServiceConfig->
dwTagId;
1912 useTag ? &tagId :
NULL,
1940 lpLoadOrderGroup = LoadOrderGroup;
1947 &hGroupOrderListKey);
1997 GroupOrder[1] = tagId;
2057 if (hService !=
NULL)
2059 if (hGroupOrderListKey !=
NULL)
2086 TRACE(
"%p, %s, 0x%lx, %p, %p, %p, %p\n", hinf,
debugstr_w(sectionname),
2115 needs_info.
type = 1;
2125 FIXME(
"Stopping the device not implemented\n");
2139 flags &= ~SPSVCINST_STOPSERVICE;
2201 IN PCSTR OEMSourceMediaLocation,
2205 IN DWORD DestinationInfFileNameSize,
2212 PWSTR DestinationInfFileNameComponentW =
NULL;
2216 TRACE(
"%s %s 0x%lx 0x%lx %p 0%lu %p %p\n",
2217 SourceInfFileName, OEMSourceMediaLocation, OEMSourceMediaType,
2218 CopyStyle, DestinationInfFileName, DestinationInfFileNameSize,
2221 if (!DestinationInfFileName && DestinationInfFileNameSize > 0)
2229 if (DestinationInfFileNameSize != 0)
2231 DestinationInfFileNameW =
MyMalloc(DestinationInfFileNameSize *
sizeof(
WCHAR));
2232 if (!DestinationInfFileNameW)
2241 OEMSourceMediaLocationW,
2244 DestinationInfFileNameW,
2245 DestinationInfFileNameSize,
2247 DestinationInfFileNameComponent ? &DestinationInfFileNameComponentW :
NULL);
2254 if (DestinationInfFileNameSize != 0)
2257 DestinationInfFileName, DestinationInfFileNameSize,
NULL,
NULL) == 0)
2259 DestinationInfFileName[0] =
'\0';
2263 if (DestinationInfFileNameComponent)
2265 if (DestinationInfFileNameComponentW)
2266 *DestinationInfFileNameComponent = &DestinationInfFileName[DestinationInfFileNameComponentW - DestinationInfFileNameW];
2268 *DestinationInfFileNameComponent =
NULL;
2274 MyFree(SourceInfFileNameW);
2275 MyFree(OEMSourceMediaLocationW);
2276 MyFree(DestinationInfFileNameW);
2289 while(
ReadFile(file1, buffer1,
sizeof(buffer1), &size1,
NULL) &&
2290 ReadFile(file2, buffer2,
sizeof(buffer2), &size2,
NULL) )
2294 return size1 > size2 ? 1 : -1;
2297 ret =
memcmp( buffer1, buffer2, size1 );
2314 IN DWORD DestinationInfFileNameSize,
2320 TRACE(
"%s %s 0x%lx 0x%lx %p 0%lu %p %p\n",
2322 CopyStyle, DestinationInfFileName, DestinationInfFileNameSize,
2325 if (!SourceInfFileName)
2334 else if (!DestinationInfFileName && DestinationInfFileNameSize > 0)
2346 DWORD NextFreeNumber = 0;
2353 FIXME(
"OEMSourceMediaType 0x%lx ignored\n", OEMSourceMediaType);
2356 if (
strchrW(SourceInfFileName,
'\\' ) ||
strchrW(SourceInfFileName,
'/' ))
2377 static const WCHAR Inf[] = {
'\\',
'i',
'n',
'f',
'\\',0};
2378 static const WCHAR System32[] = {
'\\',
's',
'y',
's',
't',
'e',
'm',
'3',
'2',
'\\',0};
2422 if (pFullFileName[
strlenW(pFullFileName) - 1] !=
'\\')
2425 pFileName = &pFullFileName[
strlenW(pFullFileName)];
2428 AlreadyExists =
FALSE;
2442 strcpyW(pFileName, FindFileData.cFileName);
2453 TRACE(
"%s already exists as %s\n",
2455 AlreadyExists =
TRUE;
2458 }
while (!AlreadyExists &&
FindNextFileW(hSearch, &FindFileData));
2476 if (DestinationInfFileNameSize == 0)
2478 else if (DestinationInfFileNameSize <
Size)
2483 strcpyW(DestinationInfFileName, pFileName);
2500 DWORD CurrentNumber;
2502 && CurrentNumber <= 99999)
2504 if (CurrentNumber >= NextFreeNumber)
2505 NextFreeNumber = CurrentNumber + 1;
2510 if (NextFreeNumber > 99999)
2512 ERR(
"Too much custom .inf files\n");
2530 if (DestinationInfFileName)
2532 if (DestinationInfFileNameSize >=
len)
2534 strcpyW(DestinationInfFileName, pFullFileName);
2535 if (DestinationInfFileNameComponent)
2536 *DestinationInfFileNameComponent = &DestinationInfFileName[pFileName - pFullFileName];
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
static void startup(void)
static WCHAR ServiceName[]
static SERVICE_STATUS ServiceStatus
#define FLG_ADDREG_OVERWRITEONLY
#define FLG_ADDREG_TYPE_MASK
#define FLG_ADDREG_TYPE_BINARY
#define FLG_ADDREG_TYPE_SZ
#define FLG_ADDREG_BINVALUETYPE
#define FLG_ADDREG_APPEND
#define FLG_ADDREG_TYPE_EXPAND_SZ
#define FLG_ADDREG_DELVAL
#define FLG_ADDREG_TYPE_MULTI_SZ
#define FLG_ADDREG_TYPE_NONE
#define FLG_ADDREG_KEYONLY
#define FLG_ADDREG_NOCLOBBER
#define FLG_ADDREG_TYPE_DWORD
static HANDLE hServicesKey
#define RegCloseKey(hKey)
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
const WCHAR * DIRID_get_string(int dirid)
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorW(LPCWSTR StringSecurityDescriptor, DWORD StringSDRevision, PSECURITY_DESCRIPTOR *SecurityDescriptor, PULONG SecurityDescriptorSize)
HRESULT(* iterate_fields_func)(HINF hinf, PCWSTR field, const void *arg)
static HRESULT iterate_section_fields(HINF hinf, PCWSTR section, PCWSTR key, iterate_fields_func callback, void *arg)
static WCHAR * get_field_string(INFCONTEXT *context, DWORD index, WCHAR *buffer, const WCHAR *static_buffer, DWORD *size)
static const WCHAR Description[]
static const WCHAR empty[]
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES
#define ReadFile(a, b, c, d, e)
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define HeapFree(x, y, z)
#define ERROR_INVALID_HANDLE
#define WideCharToMultiByte
static void cleanup(void)
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
UINT WINAPI GetSystemWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
BOOL WINAPI SetupDiGetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF InfHandle, PCWSTR InfSectionName, PWSTR InfSectionWithExt, DWORD InfSectionWithExtSize, PDWORD RequiredSize, PWSTR *Extension)
BOOL WINAPI SetupDiSetDeviceRegistryPropertyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, const BYTE *PropertyBuffer, DWORD PropertyBufferSize)
static const WCHAR WorkingDir[]
static BOOL profile_items_callback(IN HINF hInf, IN PCWSTR SectionName, IN PVOID Arg)
static BOOL copy_inf_callback(HINF hinf, PCWSTR field, void *arg)
HRESULT(WINAPI * COINITIALIZE)(IN LPVOID pvReserved)
static const WCHAR DependenciesKey[]
static const WCHAR DelFiles[]
static const WCHAR StartNameKey[]
static void append_multi_sz_value(HKEY hkey, const WCHAR *value, const WCHAR *strings, DWORD str_size)
static const WCHAR ServiceTypeKey[]
BOOL WINAPI SetupInstallFromInfSectionA(HWND owner, HINF hinf, PCSTR section, UINT flags, HKEY key_root, PCSTR src_root, UINT copy_flags, PSP_FILE_CALLBACK_A callback, PVOID context, HDEVINFO devinfo, PSP_DEVINFO_DATA devinfo_data)
static const WCHAR UpdateInis[]
static const WCHAR DotSecurity[]
static BOOL Concatenate(int DirId, LPCWSTR SubDirPart, LPCWSTR NamePart, LPWSTR *pFullName)
static const WCHAR ErrorControlKey[]
static const WCHAR InfoTip[]
static const WCHAR OemFileMask[]
static const WCHAR CmdLine[]
static const WCHAR DotServices[]
BOOL WINAPI SetupInstallServicesFromInfSectionW(HINF Inf, PCWSTR SectionName, DWORD Flags)
static const WCHAR CopyFiles[]
static const WCHAR HotKey[]
BOOL WINAPI SetupInstallFromInfSectionW(HWND owner, HINF hinf, PCWSTR section, UINT flags, HKEY key_root, PCWSTR src_root, UINT copy_flags, PSP_FILE_CALLBACK_W callback, PVOID context, HDEVINFO devinfo, PSP_DEVINFO_DATA devinfo_data)
static BOOL GetIntField(HINF hinf, PCWSTR section_name, PCWSTR key_name, INT *value)
static const WCHAR GroupOrderListKey[]
void WINAPI InstallHinfSectionW(HWND hwnd, HINSTANCE handle, LPCWSTR cmdline, INT show)
static const WCHAR LoadOrderGroupKey[]
BOOL WINAPI SetupInstallFilesFromInfSectionA(HINF hinf, HINF hlayout, HSPFILEQ queue, PCSTR section, PCSTR src_root, UINT flags)
BOOL WINAPI SetupInstallServicesFromInfSectionExA(HINF hinf, PCSTR sectionname, DWORD flags, HDEVINFO devinfo, PSP_DEVINFO_DATA devinfo_data, PVOID reserved1, PVOID reserved2)
static BOOL needs_callback(HINF hinf, PCWSTR field, void *arg)
static const WCHAR RenFiles[]
static const WCHAR DescriptionKey[]
static BOOL logconf_callback(HINF hinf, PCWSTR field, void *arg)
static const WCHAR ServiceBinaryKey[]
static BOOL do_register_dll(const struct register_dll_info *info, const WCHAR *path, INT flags, INT timeout, const WCHAR *args)
static const WCHAR IconIndex[]
static BOOL update_ini_callback(HINF hinf, PCWSTR field, void *arg)
static const WCHAR Ini2Reg[]
static const WCHAR Needs[]
HRESULT(WINAPI * COCREATEINSTANCE)(IN REFCLSID rclsid, IN LPUNKNOWN pUnkOuter, IN DWORD dwClsContext, IN REFIID riid, OUT LPVOID *ppv)
BOOL WINAPI SetupCopyOEMInfA(IN PCSTR SourceInfFileName, IN PCSTR OEMSourceMediaLocation, IN DWORD OEMSourceMediaType, IN DWORD CopyStyle, OUT PSTR DestinationInfFileName OPTIONAL, IN DWORD DestinationInfFileNameSize, OUT PDWORD RequiredSize OPTIONAL, OUT PSTR *DestinationInfFileNameComponent OPTIONAL)
static BOOL registry_callback(HINF hinf, PCWSTR field, void *arg)
static const WCHAR BackSlash[]
BOOL WINAPI SetupCopyOEMInfW(IN PCWSTR SourceInfFileName, IN PCWSTR OEMSourceMediaLocation, IN DWORD OEMSourceMediaType, IN DWORD CopyStyle, OUT PWSTR DestinationInfFileName OPTIONAL, IN DWORD DestinationInfFileNameSize, OUT PDWORD RequiredSize OPTIONAL, OUT PWSTR *DestinationInfFileNameComponent OPTIONAL)
static const WCHAR Include[]
BOOL GetStringField(PINFCONTEXT context, DWORD index, PWSTR *value)
static BOOL delete_files_callback(HINF hinf, PCWSTR field, void *arg)
static const WCHAR ProfileItems[]
static int compare_files(HANDLE file1, HANDLE file2)
static VOID FixupServiceBinaryPath(IN DWORD ServiceType, IN OUT LPWSTR *ServiceBinary)
static BOOL include_callback(HINF hinf, PCWSTR field, void *arg)
static HKEY get_root_key(const WCHAR *name, HKEY def_root)
static BOOL do_reg_operation(HKEY hkey, const WCHAR *value, INFCONTEXT *context, INT flags)
BOOL WINAPI SetupInstallFilesFromInfSectionW(HINF hinf, HINF hlayout, HSPFILEQ queue, PCWSTR section, PCWSTR src_root, UINT flags)
static const WCHAR AddService[]
static const WCHAR OemFileSpecification[]
static BOOL register_dlls_callback(HINF hinf, PCWSTR field, void *arg)
static BOOL copy_files_callback(HINF hinf, PCWSTR field, void *arg)
static BOOL rename_files_callback(HINF hinf, PCWSTR field, void *arg)
static const WCHAR LogConf[]
static void delete_multi_sz_value(HKEY hkey, const WCHAR *value, const WCHAR *string)
static const WCHAR SecurityKey[]
static const WCHAR IconPath[]
static BOOL GetLineText(HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR *value)
HRESULT(WINAPI * COUNINITIALIZE)(VOID)
static BOOL InstallOneService(struct DeviceInfoSet *list, IN HINF hInf, IN LPCWSTR ServiceSection, IN LPCWSTR ServiceName, IN UINT ServiceFlags)
BOOL WINAPI SetupInstallServicesFromInfSectionA(HINF Inf, PCSTR SectionName, DWORD Flags)
static const WCHAR SubDir[]
static const WCHAR StartTypeKey[]
static BOOL ini2reg_callback(HINF hinf, PCWSTR field, void *arg)
void WINAPI InstallHinfSectionA(HWND hwnd, HINSTANCE handle, LPCSTR cmdline, INT show)
static const WCHAR BitReg[]
static BOOL bitreg_callback(HINF hinf, PCWSTR field, void *arg)
static const WCHAR AddReg[]
static const WCHAR InfDirectory[]
static const WCHAR DisplayNameKey[]
static const WCHAR RegisterDlls[]
static BOOL update_ini_fields_callback(HINF hinf, PCWSTR field, void *arg)
static const WCHAR DelReg[]
static const WCHAR UnregisterDlls[]
BOOL WINAPI SetupInstallServicesFromInfSectionExW(HINF hinf, PCWSTR sectionname, DWORD flags, HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID reserved1, PVOID reserved2)
static const WCHAR UpdateIniFields[]
static const WCHAR DotLnk[]
static const WCHAR CopyINF[]
static const WCHAR DisplayResource[]
LPWSTR WINAPI pSetupMultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage)
LPVOID WINAPI MyMalloc(DWORD dwSize)
VOID WINAPI MyFree(LPVOID lpMem)
LPWSTR WINAPI pSetupDuplicateString(LPCWSTR lpSrc)
HINF WINAPI SetupOpenInfFileW(PCWSTR name, PCWSTR class, DWORD style, UINT *error)
WCHAR * PARSER_get_dest_dir(INFCONTEXT *context)
BOOL WINAPI SetupOpenAppendInfFileW(PCWSTR name, HINF parent_hinf, UINT *error)
BOOL WINAPI SetupFindNextMatchLineW(PINFCONTEXT context_in, PCWSTR key, PINFCONTEXT context_out)
BOOL WINAPI SetupGetLineTextW(PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required)
BOOL WINAPI SetupQueueRenameSectionW(HSPFILEQ queue, HINF hinf, HINF hlist, PCWSTR section)
BOOL WINAPI SetupQueueDefaultCopyW(HSPFILEQ queue, HINF hinf, PCWSTR src_root, PCWSTR src_file, PCWSTR dst_file, DWORD style)
UINT CALLBACK QUEUE_callback_WtoA(void *context, UINT notification, UINT_PTR param1, UINT_PTR param2)
UINT WINAPI SetupDefaultQueueCallbackW(PVOID context, UINT notification, UINT_PTR param1, UINT_PTR param2)
void WINAPI SetupTermDefaultQueueCallback(PVOID context)
PVOID WINAPI SetupInitDefaultQueueCallback(HWND owner)
BOOL WINAPI SetupQueueDeleteSectionW(HSPFILEQ queue, HINF hinf, HINF hlist, PCWSTR section)
BOOL WINAPI SetupQueueCopySectionW(HSPFILEQ queue, PCWSTR src_root, HINF hinf, HINF hlist, PCWSTR section, DWORD style)
INT WINAPI SetupPromptReboot(HSPFILEQ file_queue, HWND owner, BOOL scan_only)
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
UINT(CALLBACK * PSP_FILE_CALLBACK_W)(IN PVOID Context, IN UINT Notification, IN UINT_PTR Param1, IN UINT_PTR Param2)
GLuint GLuint GLsizei GLenum type
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei const GLchar *const * strings
GLenum GLuint GLenum GLsizei const GLchar * buf
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
HLOCAL NTAPI LocalFree(HLOCAL hMem)
_Check_return_ _CRTIMP int __cdecl swscanf(_In_z_ const wchar_t *_Src, _In_z_ _Scanf_format_string_ const wchar_t *_Format,...)
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
REFIID LPVOID DWORD_PTR dw
#define MAX_INF_STRING_LENGTH
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static IPrintDialogCallback callback
static LPCSTR DWORD void * pvReserved
static BOOL create_fake_dll(LPCSTR filename)
unsigned __int3264 UINT_PTR
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(_Out_ PUNICODE_STRING Destination, _In_ PCSZ Source)
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN _Inout_ PMM_REQUIRED_RESOURCES Required
#define FILE_READ_ATTRIBUTES
#define FILE_SHARE_DELETE
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSTATUS NTAPI NtDeleteKey(IN HANDLE KeyHandle)
const GUID IID_IPersistFile
#define SetupOpenFileQueue
#define SetupCommitFileQueueW
#define SetupCloseFileQueue
#define strtoulW(s1, s2, b)
#define FLG_ADDREG_DELREG_BIT
static const WCHAR HKLM[]
static const WCHAR HKCR[]
#define FLG_DELREG_KEYONLY_COMMON
#define FLG_ADDREG_KEYONLY_COMMON
static const WCHAR HKCU[]
#define REGSTR_PATH_SERVICES
BOOL WINAPI DeleteService(SC_HANDLE hService)
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
BOOL WINAPI ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
BOOL WINAPI QueryServiceConfigW(SC_HANDLE hService, LPQUERY_SERVICE_CONFIGW lpServiceConfig, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
BOOL WINAPI ChangeServiceConfigW(SC_HANDLE hService, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCWSTR lpBinaryPathName, LPCWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCWSTR lpDependencies, LPCWSTR lpServiceStartName, LPCWSTR lpPassword, LPCWSTR lpDisplayName)
SC_HANDLE WINAPI CreateServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, LPCWSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCWSTR lpBinaryPathName, LPCWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCWSTR lpDependencies, LPCWSTR lpServiceStartName, LPCWSTR lpPassword)
BOOL WINAPI SetServiceObjectSecurity(SC_HANDLE hService, SECURITY_INFORMATION dwSecurityInformation, PSECURITY_DESCRIPTOR lpSecurityDescriptor)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define SP_COPY_OEMINF_CATALOG_ONLY
#define SPSVCINST_NOCLOBBER_ERRORCONTROL
#define SPREG_GETPROCADDR
#define FLG_REGSVR_DLLREGISTER
#define SP_COPY_NOOVERWRITE
#define SP_COPY_DELETESOURCE
#define SPSVCINST_DELETEEVENTLOGENTRY
#define SPSVCINST_NOCLOBBER_DISPLAYNAME
#define SPINST_PROFILEITEMS
#define SP_COPY_REPLACEONLY
#define SPSVCINST_NOCLOBBER_LOADORDERGROUP
SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS
#define SPFILENOTIFY_STARTREGISTRATION
#define ERROR_BAD_SERVICE_INSTALLSECT
#define FLG_PROFITEM_CSIDL
#define SPSVCINST_NOCLOBBER_STARTTYPE
#define ERROR_SECTION_NOT_FOUND
#define SPSVCINST_TAGTOFRONT
#define SPFILENOTIFY_ENDREGISTRATION
#define SPSVCINST_NOCLOBBER_DEPENDENCIES
UINT(CALLBACK * PSP_FILE_CALLBACK_A)(PVOID, UINT, UINT_PTR, UINT_PTR)
#define SPSVCINST_ASSOCSERVICE
_In_opt_ PSP_DEVINFO_DATA DeviceInfoData
#define SP_COPY_IN_USE_NEEDS_REBOOT
#define FLG_PROFITEM_GROUP
#define SPREG_LOADLIBRARY
#define FLG_PROFITEM_DELETE
#define FLG_REGSVR_DLLINSTALL
#define SPSVCINST_STOPSERVICE
#define FLG_PROFITEM_CURRENTUSER
#define SETUP_DEVICE_INFO_SET_MAGIC
#define PSPGF_NONINTERACTIVE
#define CSIDL_COMMON_PROGRAMS
PULONG MinorVersion OPTIONAL
LPVOID lpSecurityDescriptor
PSP_DEVINFO_DATA devinfo_data
PSP_FILE_CALLBACK_W callback
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
BOOL WINAPI SetupGetStringFieldW(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PWSTR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
BOOL WINAPI SetupFindFirstLineW(IN HINF InfHandle, IN PCWSTR Section, IN PCWSTR Key, IN OUT PINFCONTEXT Context)
BOOL WINAPI SetupGetMultiSzFieldW(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PWSTR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
BOOL WINAPI SetupGetIntField(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT INT *IntegerValue)
ULONG WINAPI SetupGetFieldCount(IN PINFCONTEXT Context)
BOOL WINAPI SetupFindNextLine(IN PINFCONTEXT ContextIn, OUT PINFCONTEXT ContextOut)
VOID WINAPI SetupCloseInfFile(IN HINF InfHandle)
BOOL WINAPI SetupGetBinaryField(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PUCHAR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
DWORD WINAPI GetLastError(void)
#define LOAD_WITH_ALTERED_SEARCH_PATH
#define ERROR_SERVICE_MARKED_FOR_DELETE
#define HRESULT_FACILITY(hr)
#define ERROR_INVALID_USER_BUFFER
#define ERROR_SERVICE_NOT_ACTIVE
#define ERROR_GEN_FAILURE
#define ERROR_SERVICE_DOES_NOT_EXIST
#define ERROR_FILE_EXISTS
#define ERROR_SUCCESS_REBOOT_REQUIRED
#define HRESULT_FROM_WIN32(x)
#define ERROR_INVALID_FLAGS
#define ERROR_OPERATION_ABORTED
#define ERROR_INSTALL_SERVICE_FAILURE
#define ERROR_INVALID_DATA
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define HKEY_CLASSES_ROOT
#define SC_MANAGER_CREATE_SERVICE
#define SERVICE_NO_CHANGE
#define SERVICE_STOP_PENDING
#define SERVICE_CHANGE_CONFIG
#define SERVICES_ACTIVE_DATABASE
#define SERVICE_CONTROL_STOP
#define SERVICE_QUERY_CONFIG
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
BOOL WINAPI ExitWindowsEx(_In_ UINT, _In_ DWORD)
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
_Must_inspect_result_ _In_ ULONG Flags
#define SERVICE_BOOT_START
#define SERVICE_SYSTEM_START
#define DACL_SECURITY_INFORMATION