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 ))
576 static const WCHAR format[] = {
'"',
'%',
's',
'"',
' ',
'%',
's',0};
577 static const WCHAR default_args[] = {
'/',
'R',
'e',
'g',
'S',
'e',
'r',
'v',
'e',
'r',0};
611 const char *entry_point =
info->unregister ?
"DllUnregisterServer" :
"DllRegisterServer";
644 TRACE(
"calling DllInstall(%d,%s) in %s\n",
693 if (
p ==
path ||
p[-1] !=
'\\') *
p++ =
'\\';
743 if (
p ==
path ||
p[-1] !=
'\\') *
p++ =
'\\';
840 DWORD dwRequired = 0;
848 dwRequired +=
wcslen(Dir) + 1;
850 dwRequired +=
wcslen(SubDirPart) + 1;
852 dwRequired +=
wcslen(NamePart);
895 INT LinkAttributes = 0;
906 INT DisplayResId = 0;
918 TRACE(
"hInf %p, SectionName %s, Arg %p\n",
950 if (!
Concatenate(FileDirId, FileSubDir, NamePart, &FullFileName))
996 if (!
Concatenate(DirId, SubDirPart, NamePart, &FullIconName))
1000 SubDirPart = NamePart =
NULL;
1036 TRACE(
"Display %s, %d\n", DisplayName, DisplayResId);
1046 if (!pCoCreateInstance)
1049 if (!pCoUninitialize)
1053 hr = pCoInitialize(
NULL);
1062 hr = pCoCreateInstance(&CLSID_ShellLink,
NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkW, (
LPVOID*)&psl);
1066 hr = IShellLinkW_SetPath(psl, FullFileName);
1068 hr = IShellLinkW_SetArguments(psl,
L"");
1070 hr = IShellLinkW_SetWorkingDirectory(psl, FullWorkingDir);
1072 hr = IShellLinkW_SetIconLocation(psl, FullIconName, IconIdx);
1074 FIXME(
"Need to store hotkey %s in shell link\n",
debugstr_w(lpHotKey));
1076 hr = IShellLinkW_SetDescription(psl, lpInfoTip);
1078 FIXME(
"Need to store display name %s, %d in shell link\n",
debugstr_w(DisplayName), DisplayResId);
1085 ((LinkSubDir !=
NULL) ?
wcslen(LinkSubDir) : 0) +
1093 FIXME(
"Need to handle FLG_PROFITEM_DELETE and FLG_PROFITEM_GROUP\n");
1105 if (FullLinkName[
wcslen(FullLinkName) - 1] !=
'\\')
1109 wcscat(FullLinkName, LinkSubDir);
1110 if (FullLinkName[
wcslen(FullLinkName) - 1] !=
'\\')
1115 wcscat(FullLinkName, LinkName);
1118 hr = IPersistFile_Save(ppf, FullLinkName,
TRUE);
1123 IPersistFile_Release(ppf);
1126 IShellLinkW_Release(psl);
1174 WCHAR static_buffer[200];
1190 WARN(
"callback failed for %s %s err %d\n",
1248 info.layout = hlayout;
1278 &
ctx, devinfo, devinfo_data );
1318 ERR(
"Unknown info type %u\n",
info->type);
1336 needs_info.
type = 0;
1353 BOOL use_custom_queue;
1367 if (!use_custom_queue)
1397 if (
flags & SPINST_REGISTERCALLBACKAWARE)
1417 if (
flags & SPINST_REGISTERCALLBACKAWARE)
1431 info.default_root = key_root;
1449 if (
flags & SPINST_COPYINF)
1470 DWORD SectionNameLength;
1481 while (*
s ==
' ')
s++;
1486 while (*
s ==
' ')
s++;
1491 FIXME(
"default path of the installation not changed\n");
1506 WARN(
"SetupDiGetActualSectionToInstallW() failed (Error %u)\n",
GetLastError());
1537 WARN(
"SetupInstallServicesFromInfSectionW() failed (Error %u)\n",
GetLastError());
1542 bRebootRequired =
TRUE;
1554 SHTDN_REASON_MINOR_INSTALLATION | SHTDN_REASON_FLAG_PLANNED);
1562 if (bRebootRequired)
1565 SHTDN_REASON_MINOR_INSTALLATION | SHTDN_REASON_FLAG_PLANNED);
1570 if (bRebootRequired)
1585#ifdef CORE_11689_IS_FIXED
1741 DWORD RosDirLength, ServiceLength, Win32Length;
1744 RosDirLength =
strlenW(ReactOSDir);
1745 ServiceLength =
strlenW(*ServiceBinary);
1752 if (ServiceLength < RosDirLength)
1755 if (!
wcsnicmp(*ServiceBinary, ReactOSDir, RosDirLength))
1758 MoveMemory(*ServiceBinary, *ServiceBinary + RosDirLength + 1,
1759 (ServiceLength - RosDirLength) *
sizeof(
WCHAR));
1764 Win32Length = (ServiceLength - RosDirLength) *
sizeof(
WCHAR)
1765 -
sizeof(
L'\\') +
sizeof(
L"%SystemRoot%\\");
1785 SC_HANDLE hService =
NULL;
1801 INT ServiceType, StartType, ErrorControl;
1845 if (!LoadOrderGroup || !*LoadOrderGroup)
1862 if (hService ==
NULL)
1875 useTag ? &tagId :
NULL,
1879 if (hService ==
NULL)
1899 tagId = ServiceConfig->
dwTagId;
1909 useTag ? &tagId :
NULL,
1937 lpLoadOrderGroup = LoadOrderGroup;
1944 &hGroupOrderListKey);
1994 GroupOrder[1] = tagId;
2054 if (hService !=
NULL)
2056 if (hGroupOrderListKey !=
NULL)
2083 TRACE(
"%p, %s, 0x%lx, %p, %p, %p, %p\n", hinf,
debugstr_w(sectionname),
2112 needs_info.
type = 1;
2122 FIXME(
"Stopping the device not implemented\n");
2136 flags &= ~SPSVCINST_STOPSERVICE;
2198 IN PCSTR OEMSourceMediaLocation,
2202 IN DWORD DestinationInfFileNameSize,
2209 PWSTR DestinationInfFileNameComponentW =
NULL;
2213 TRACE(
"%s %s 0x%lx 0x%lx %p 0%lu %p %p\n",
2214 SourceInfFileName, OEMSourceMediaLocation, OEMSourceMediaType,
2215 CopyStyle, DestinationInfFileName, DestinationInfFileNameSize,
2218 if (!DestinationInfFileName && DestinationInfFileNameSize > 0)
2226 if (DestinationInfFileNameSize != 0)
2228 DestinationInfFileNameW =
MyMalloc(DestinationInfFileNameSize *
sizeof(
WCHAR));
2229 if (!DestinationInfFileNameW)
2238 OEMSourceMediaLocationW,
2241 DestinationInfFileNameW,
2242 DestinationInfFileNameSize,
2244 DestinationInfFileNameComponent ? &DestinationInfFileNameComponentW :
NULL);
2251 if (DestinationInfFileNameSize != 0)
2254 DestinationInfFileName, DestinationInfFileNameSize,
NULL,
NULL) == 0)
2256 DestinationInfFileName[0] =
'\0';
2260 if (DestinationInfFileNameComponent)
2262 if (DestinationInfFileNameComponentW)
2263 *DestinationInfFileNameComponent = &DestinationInfFileName[DestinationInfFileNameComponentW - DestinationInfFileNameW];
2265 *DestinationInfFileNameComponent =
NULL;
2271 MyFree(SourceInfFileNameW);
2272 MyFree(OEMSourceMediaLocationW);
2273 MyFree(DestinationInfFileNameW);
2286 while(
ReadFile(file1, buffer1,
sizeof(buffer1), &size1,
NULL) &&
2287 ReadFile(file2, buffer2,
sizeof(buffer2), &size2,
NULL) )
2291 return size1 > size2 ? 1 : -1;
2294 ret =
memcmp( buffer1, buffer2, size1 );
2311 IN DWORD DestinationInfFileNameSize,
2317 TRACE(
"%s %s 0x%lx 0x%lx %p 0%lu %p %p\n",
2319 CopyStyle, DestinationInfFileName, DestinationInfFileNameSize,
2322 if (!SourceInfFileName)
2331 else if (!DestinationInfFileName && DestinationInfFileNameSize > 0)
2343 DWORD NextFreeNumber = 0;
2350 FIXME(
"OEMSourceMediaType 0x%lx ignored\n", OEMSourceMediaType);
2353 if (
strchrW(SourceInfFileName,
'\\' ) ||
strchrW(SourceInfFileName,
'/' ))
2374 static const WCHAR Inf[] = {
'\\',
'i',
'n',
'f',
'\\',0};
2375 static const WCHAR System32[] = {
'\\',
's',
'y',
's',
't',
'e',
'm',
'3',
'2',
'\\',0};
2419 if (pFullFileName[
strlenW(pFullFileName) - 1] !=
'\\')
2422 pFileName = &pFullFileName[
strlenW(pFullFileName)];
2425 AlreadyExists =
FALSE;
2439 strcpyW(pFileName, FindFileData.cFileName);
2450 TRACE(
"%s already exists as %s\n",
2452 AlreadyExists =
TRUE;
2455 }
while (!AlreadyExists &&
FindNextFileW(hSearch, &FindFileData));
2473 if (DestinationInfFileNameSize == 0)
2475 else if (DestinationInfFileNameSize <
Size)
2480 strcpyW(DestinationInfFileName, pFileName);
2497 DWORD CurrentNumber;
2499 && CurrentNumber <= 99999)
2501 if (CurrentNumber >= NextFreeNumber)
2502 NextFreeNumber = CurrentNumber + 1;
2507 if (NextFreeNumber > 99999)
2509 ERR(
"Too much custom .inf files\n");
2527 if (DestinationInfFileName)
2529 if (DestinationInfFileNameSize >=
len)
2531 strcpyW(DestinationInfFileName, pFullFileName);
2532 if (DestinationInfFileNameComponent)
2533 *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)
HSPFILEQ WINAPI SetupOpenFileQueue(void)
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
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
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 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 SetupCloseFileQueue(IN HSPFILEQ QueueHandle)
BOOL WINAPI SetupCommitFileQueueW(IN HWND Owner, IN HSPFILEQ QueueHandle, IN PSP_FILE_CALLBACK_W MsgHandler, IN PVOID Context OPTIONAL)
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