- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-OpenClassKey(
- IN const GUID *Guid,
- OUT PHKEY Key
- )
-{
- TCHAR KeyName[MAX_PATH];
- HRESULT Result;
- HRESULT Error;
-
- Result = StringCbPrintf(KeyName,
- MAX_PATH,
- "%s\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
- CLASS_KEY,
- Guid->Data1,
- Guid->Data2,
- Guid->Data3,
- Guid->Data4[0],
- Guid->Data4[1],
- Guid->Data4[2],
- Guid->Data4[3],
- Guid->Data4[4],
- Guid->Data4[5],
- Guid->Data4[6],
- Guid->Data4[7]);
- if (!SUCCEEDED(Result)) {
- SetLastError(ERROR_BUFFER_OVERFLOW);
- goto fail1;
- }
-
- Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- KeyName,
- 0,
- KEY_READ,
- Key);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- return TRUE;
-
-fail2:
- Log("fail2");
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-FindAliasByAddress(
- IN PETHERNET_ADDRESS Address,
- OUT PTCHAR *SoftwareKeyName
- )
-{
- const GUID *Guid = &GUID_DEVCLASS_NET;
- BOOLEAN Success;
- PNET_LUID NetLuid;
- HKEY NetKey;
- HRESULT Error;
- DWORD SubKeys;
- DWORD MaxSubKeyLength;
- DWORD SubKeyLength;
- PTCHAR SubKeyName;
- DWORD Index;
- HKEY SubKey;
-
- Log("====>");
-
- Success = GetNetLuid(Address, &NetLuid);
- if (!Success)
- goto fail1;
-
- *SoftwareKeyName = NULL;
-
- if (NetLuid == NULL)
- goto done;
-
- Success = OpenClassKey(Guid, &NetKey);
- if (!Success)
- goto fail2;
-
- Error = RegQueryInfoKey(NetKey,
- NULL,
- NULL,
- NULL,
- &SubKeys,
- &MaxSubKeyLength,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail3;
- }
-
- SubKeyLength = MaxSubKeyLength + sizeof (TCHAR);
-
- SubKeyName = calloc(1, SubKeyLength);
- if (SubKeyName == NULL)
- goto fail4;
-
- for (Index = 0; Index < SubKeys; Index++) {
- DWORD Length;
- DWORD Type;
- DWORD IfType;
- DWORD NetLuidIndex;
-
- SubKeyLength = MaxSubKeyLength + sizeof (TCHAR);
- memset(SubKeyName, 0, SubKeyLength);
-
- Error = RegEnumKeyEx(NetKey,
- Index,
- (LPTSTR)SubKeyName,
- &SubKeyLength,
- NULL,
- NULL,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail5;
- }
-
- Error = RegOpenKeyEx(NetKey,
- SubKeyName,
- 0,
- KEY_READ,
- &SubKey);
- if (Error != ERROR_SUCCESS)
- continue;
-
- Length = sizeof (DWORD);
- Error = RegQueryValueEx(SubKey,
- "*IfType",
- NULL,
- &Type,
- (LPBYTE)&IfType,
- &Length);
- if (Error != ERROR_SUCCESS ||
- Type != REG_DWORD)
- goto loop;
-
- Length = sizeof (DWORD);
- Error = RegQueryValueEx(SubKey,
- "NetLuidIndex",
- NULL,
- &Type,
- (LPBYTE)&NetLuidIndex,
- &Length);
- if (Error != ERROR_SUCCESS ||
- Type != REG_DWORD)
- goto loop;
-
- if (NetLuid->Info.IfType == IfType &&
- NetLuid->Info.NetLuidIndex == NetLuidIndex) {
- *SoftwareKeyName = SubKeyName;
-
- RegCloseKey(SubKey);
- break;
- }
-
-loop:
- RegCloseKey(SubKey);
- }
-
- if (*SoftwareKeyName == NULL)
- free(SubKeyName);
-
- RegCloseKey(NetKey);
-
- free(NetLuid);
-
-done:
- Log("%s", (*SoftwareKeyName == NULL) ? "[NONE]" : *SoftwareKeyName);
-
- Log("<====");
-
- return TRUE;
-
-fail5:
- Log("fail5");
-
- free(SubKeyName);
-
-fail4:
- Log("fail4");
-
-fail3:
- Log("fail3");
-
- RegCloseKey(NetKey);
-
-fail2:
- Log("fail2");
-
- free(NetLuid);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-LinkAliasToLocation(
- IN PTCHAR Location,
- IN PTCHAR SoftwareKeyName
- )
-{
- const GUID *Guid = &GUID_DEVCLASS_NET;
- HKEY NetKey;
- HRESULT Error;
- HKEY SoftwareKey;
- DWORD LocationLength;
- BOOLEAN Success;
-
- Log("====>");
-
- Success = OpenClassKey(Guid, &NetKey);
- if (!Success)
- goto fail1;
-
- Error = RegOpenKeyEx(NetKey,
- SoftwareKeyName,
- 0,
- KEY_ALL_ACCESS,
- &SoftwareKey);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- LocationLength = (DWORD)((strlen(Location) + 1) * sizeof (TCHAR));
-
- Error = RegSetValueEx(SoftwareKey,
- "VIF",
- 0,
- REG_SZ,
- (LPBYTE)Location,
- LocationLength);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail3;
- }
-
- Log("VIF = %s", Location);
-
- RegCloseKey(SoftwareKey);
-
- RegCloseKey(NetKey);
-
- Log("<====");
-
- return TRUE;
-
-fail3:
- Log("fail3");
-
- RegCloseKey(SoftwareKey);
-
-fail2:
- Log("fail2");
-
- RegCloseKey(NetKey);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-FindAliasByLocation(
- IN PTCHAR Location,
- OUT PTCHAR *SoftwareKeyName
- )
-{
- const GUID *Guid = &GUID_DEVCLASS_NET;
- BOOLEAN Success;
- HKEY NetKey;
- HRESULT Error;
- DWORD SubKeys;
- DWORD MaxSubKeyLength;
- DWORD SubKeyLength;
- PTCHAR SubKeyName;
- DWORD Index;
- DWORD VifLength;
- PTCHAR Vif;
- HKEY SubKey;
-
- Log("====>");
-
- *SoftwareKeyName = NULL;
-
- Success = OpenClassKey(Guid, &NetKey);
- if (!Success)
- goto fail1;
-
- Error = RegQueryInfoKey(NetKey,
- NULL,
- NULL,
- NULL,
- &SubKeys,
- &MaxSubKeyLength,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- SubKeyLength = MaxSubKeyLength + sizeof (TCHAR);
-
- SubKeyName = calloc(1, SubKeyLength);
- if (SubKeyName == NULL)
- goto fail3;
-
- for (Index = 0; Index < SubKeys; Index++) {
- DWORD MaxValueLength;
- DWORD Type;
-
- SubKeyLength = MaxSubKeyLength + sizeof (TCHAR);
- memset(SubKeyName, 0, SubKeyLength);
-
- Error = RegEnumKeyEx(NetKey,
- Index,
- (LPTSTR)SubKeyName,
- &SubKeyLength,
- NULL,
- NULL,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail4;
- }
-
- Error = RegOpenKeyEx(NetKey,
- SubKeyName,
- 0,
- KEY_READ,
- &SubKey);
- if (Error != ERROR_SUCCESS)
- continue;
-
- Error = RegQueryInfoKey(SubKey,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- &MaxValueLength,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail5;
- }
-
- VifLength = MaxValueLength + sizeof (TCHAR);
-
- Vif = calloc(1, VifLength);
- if (Vif == NULL)
- goto fail6;
-
- Error = RegQueryValueEx(SubKey,
- "VIF",
- NULL,
- &Type,
- (LPBYTE)Vif,
- &VifLength);
- if (Error != ERROR_SUCCESS ||
- Type != REG_SZ)
- goto loop;
-
- if (strcmp(Vif, Location) == 0) {
- *SoftwareKeyName = SubKeyName;
-
- free(Vif);
-
- RegCloseKey(SubKey);
- break;
- }
-
-loop:
- free(Vif);
-
- RegCloseKey(SubKey);
- }
-
- if (*SoftwareKeyName == NULL)
- free(SubKeyName);
-
- RegCloseKey(NetKey);
-
- Log("%s", (*SoftwareKeyName == NULL) ? "[NONE]" : *SoftwareKeyName);
-
- Log("<====");
-
- return TRUE;
-
-fail6:
- Log("fail6");
-
-fail5:
- Log("fail5");
-
- RegCloseKey(SubKey);
-
-fail4:
- Log("fail4");
-
- free(SubKeyName);
-
-fail3:
- Log("fail3");
-
-fail2:
- Log("fail2");
-
- RegCloseKey(NetKey);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-CopyKeyValues(
- IN HKEY DestinationKey,
- IN HKEY SourceKey
- )
-{
- HRESULT Error;
- DWORD Values;
- DWORD MaxValueNameLength;
- PTCHAR ValueName;
- DWORD MaxValueLength;
- LPBYTE Value;
- DWORD Index;
-
- Error = RegQueryInfoKey(SourceKey,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- &Values,
- &MaxValueNameLength,
- &MaxValueLength,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail1;
- }
-
- if (Values == 0)
- goto done;
-
- MaxValueNameLength += sizeof (TCHAR);
-
- ValueName = calloc(1, MaxValueNameLength);
- if (ValueName == NULL)
- goto fail2;
-
- Value = calloc(1, MaxValueLength);
- if (Value == NULL)
- goto fail3;
-
- for (Index = 0; Index < Values; Index++) {
- DWORD ValueNameLength;
- DWORD ValueLength;
- DWORD Type;
-
- ValueNameLength = MaxValueNameLength;
- memset(ValueName, 0, ValueNameLength);
-
- ValueLength = MaxValueLength;
- memset(Value, 0, ValueLength);
-
- Error = RegEnumValue(SourceKey,
- Index,
- (LPTSTR)ValueName,
- &ValueNameLength,
- NULL,
- &Type,
- Value,
- &ValueLength);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail4;
- }
-
- Error = RegSetValueEx(DestinationKey,
- ValueName,
- 0,
- Type,
- Value,
- ValueLength);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail5;
- }
-
- Log("COPIED %s", ValueName);
- }
-
- free(Value);
- free(ValueName);
-
-done:
- return TRUE;
-
-fail5:
- Log("fail5");
-
-fail4:
- Log("fail4");
-
- free(Value);
-
-fail3:
- Log("fail3");
-
- free(ValueName);
-
-fail2:
- Log("fail2");
-
-fail1:
- Log("fail1");
-
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-CopySubKey(
- IN HKEY DestinationKey,
- IN HKEY SourceKey,
- IN PTCHAR SubKeyName
- )
-{
- HRESULT Error;
- HKEY DestinationSubKey;
- HKEY SourceSubKey;
-
- Log("====>");
-
- Log("%s", SubKeyName);
-
- Error = RegOpenKeyEx(SourceKey,
- SubKeyName,
- 0,
- KEY_READ,
- &SourceSubKey);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail1;
- }
-
- Error = RegCreateKeyEx(DestinationKey,
- SubKeyName,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_ALL_ACCESS,
- NULL,
- &DestinationSubKey,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- CopyKeyValues(DestinationSubKey, SourceSubKey);
-
- RegCloseKey(DestinationSubKey);
- RegCloseKey(SourceSubKey);
-
- Log("<====");
-
- return TRUE;
-
-fail2:
- Log("fail2");
-
- RegCloseKey(SourceSubKey);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-CopyValue(
- IN HKEY DestinationKey,
- IN HKEY SourceKey,
- IN PTCHAR ValueName
- )
-{
- HRESULT Error;
- DWORD MaxValueLength;
- LPBYTE Value;
- DWORD ValueLength;
- DWORD Type;
-
- Log("====>");
-
- Error = RegQueryInfoKey(SourceKey,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- &MaxValueLength,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail1;
- }
-
- ValueLength = MaxValueLength;
-
- Value = calloc(1, ValueLength);
- if (Value == NULL)
- goto fail2;
-
- memset(Value, 0, ValueLength);
-
- Error = RegQueryValueEx(SourceKey,
- ValueName,
- NULL,
- &Type,
- (LPBYTE)Value,
- &ValueLength);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail3;
- }
-
- Error = RegSetValueEx(DestinationKey,
- ValueName,
- 0,
- Type,
- Value,
- ValueLength);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail4;
- }
-
- Log("COPIED %s", ValueName);
-
- free(Value);
-
- Log("<====");
-
- return TRUE;
-
-fail4:
- Log("fail4");
-
-fail3:
- Log("fail3");
-
- free(Value);
-
-fail2:
- Log("fail2");
-
-fail1:
- Log("fail1");
-
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-StealLinkageFromAlias(
- IN HDEVINFO DeviceInfoSet,
- IN PSP_DEVINFO_DATA DeviceInfoData,
- IN PTCHAR SoftwareKeyName
- )
-{
- const GUID *Guid = &GUID_DEVCLASS_NET;
- BOOLEAN Success;
- HKEY NetKey;
- HRESULT Error;
- HKEY SourceKey;
- HKEY DestinationKey;
-
- Log("====>");
-
- Success = OpenClassKey(Guid, &NetKey);
- if (!Success)
- goto fail1;
-
- Error = RegOpenKeyEx(NetKey,
- SoftwareKeyName,
- 0,
- KEY_ALL_ACCESS,
- &SourceKey);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- Success = OpenSoftwareKey(DeviceInfoSet,
- DeviceInfoData,
- &DestinationKey);
- if (!Success)
- goto fail3;
-
- Success = CopyValue(DestinationKey,
- SourceKey,
- "NetCfgInstanceID");
- if (!Success)
- goto fail4;
-
- Success = CopyValue(DestinationKey,
- SourceKey,
- "NetLuidIndex");
- if (!Success)
- goto fail5;
-
- Success = CopySubKey(DestinationKey,
- SourceKey,
- "Linkage");
- if (!Success)
- goto fail6;
-
- RegCloseKey(DestinationKey);
-
- RegCloseKey(SourceKey);
-
- RegCloseKey(NetKey);
-
- Log("<====");
-
- return TRUE;
-
-fail6:
- Log("fail6");
-
-fail5:
- Log("fail5");
-
-fail4:
- Log("fail4");
-
- RegCloseKey(DestinationKey);
-
-fail3:
- Log("fail3");
-
- RegCloseKey(SourceKey);
-
-fail2:
- Log("fail2");
-
- RegCloseKey(NetKey);
-
-fail1:
- Log("fail1");
-
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-ClearStolenLinkage(
- IN HDEVINFO DeviceInfoSet,
- IN PSP_DEVINFO_DATA DeviceInfoData
- )
-{
- BOOLEAN Success;
- HKEY SoftwareKey;
- HRESULT Error;
-
- Log("====>");
-
- Success = OpenSoftwareKey(DeviceInfoSet,
- DeviceInfoData,
- &SoftwareKey);
- if (!Success)
- goto fail1;
-
- (VOID) RegDeleteKey(SoftwareKey, "Linkage");
- (VOID) RegDeleteValue(SoftwareKey, "NetLuidIndex");
- (VOID) RegDeleteValue(SoftwareKey, "NetCfgInstanceID");
-
- RegCloseKey(SoftwareKey);
-
- Log("<====");
-
- return TRUE;
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static FORCEINLINE HRESULT
-__DifInstallPreProcess(
- IN HDEVINFO DeviceInfoSet,
- IN PSP_DEVINFO_DATA DeviceInfoData,
- IN PCOINSTALLER_CONTEXT_DATA Context
- )
-{
- HRESULT Error;
- BOOLEAN Success;
- BOOLEAN Allow;
- ETHERNET_ADDRESS Address;
- PTCHAR Location;
- PTCHAR SoftwareKeyName;
-
- Log("====>");
-
- Context->PrivateData = NULL;
-
- Success = AllowInstall(&Allow);
- if (!Success)
- goto fail1;
-
- if (!Allow) {
- SetLastError(ERROR_ACCESS_DENIED);
- goto fail2;
- }
-
- Location = NULL;
-
- Success = GetLocation(DeviceInfoSet,
- DeviceInfoData,
- &Location);
- if (!Success)
- goto fail3;
-
- Success = GetPermanentAddress(DeviceInfoSet,
- DeviceInfoData,
- &Address);
- if (!Success)
- goto fail4;
-
- SoftwareKeyName = NULL;
-
- Success = FindAliasByAddress(&Address,
- &SoftwareKeyName);
- if (!Success)
- goto fail5;
-
- if (SoftwareKeyName != NULL) {
- Success = LinkAliasToLocation(Location,
- SoftwareKeyName);
-
- free(SoftwareKeyName);
-
- if (!Success)
- goto fail6;
-
- Context->PrivateData = (PVOID)TRUE;
- goto done;
- }
-
- SoftwareKeyName = NULL;
-
- Success = FindAliasByLocation(Location,
- &SoftwareKeyName);
- if (!Success)
- goto fail7;
-
- if (SoftwareKeyName != NULL) {
- Success = StealLinkageFromAlias(DeviceInfoSet,
- DeviceInfoData,
- SoftwareKeyName);
-
- free(SoftwareKeyName);
-
- if (!Success)
- goto fail8;
- }
-
-done:
- Log("<====");
-
- return NO_ERROR;
-
-fail8:
- Log("fail8");
-
-fail7:
- Log("fail7");
-
-fail6:
- Log("fail6");
-
-fail5:
- Log("fail5");
-
-fail4:
- Log("fail4");
-
- free(Location);
-
-fail3:
- Log("fail3");
-
-fail2:
- Log("fail2");
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return Error;
-}
-
-static FORCEINLINE HRESULT
-__DifInstallPostProcess(
- IN HDEVINFO DeviceInfoSet,
- IN PSP_DEVINFO_DATA DeviceInfoData,
- IN PCOINSTALLER_CONTEXT_DATA Context
- )
-{
- HRESULT Error;
- BOOLEAN Success;
- PTCHAR Location;
- PTCHAR SoftwareKeyName;
-
- Log("====>");
-
- if (Context->PrivateData == NULL)
- goto done;
-
- Location = NULL;
-
- Success = GetLocation(DeviceInfoSet,
- DeviceInfoData,
- &Location);
- if (!Success)
- goto fail1;
-
- SoftwareKeyName = NULL;
-
- Success = FindAliasByLocation(Location,
- &SoftwareKeyName);
- if (!Success)
- goto fail2;
-
- if (SoftwareKeyName != NULL) {
- Success = StealLinkageFromAlias(DeviceInfoSet,
- DeviceInfoData,
- SoftwareKeyName);
-
- free(SoftwareKeyName);
-
- if (!Success)
- goto fail3;
- }
-
-done:
- Log("<====");
-
- return NO_ERROR;
-
-fail3:
- Log("fail3");
-
-fail2:
- Log("fail2");
-
- free(Location);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = __GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return Error;
-}
-
-static DECLSPEC_NOINLINE HRESULT
-DifInstall(
- IN HDEVINFO DeviceInfoSet,
- IN PSP_DEVINFO_DATA DeviceInfoData,
- IN PCOINSTALLER_CONTEXT_DATA Context
- )
-{
- HRESULT Error;
-
- if (!Context->PostProcessing) {
- Error = __DifInstallPreProcess(DeviceInfoSet, DeviceInfoData, Context);
- if (Error == NO_ERROR)
- Error = ERROR_DI_POSTPROCESSING_REQUIRED;
- } else {
- Error = Context->InstallResult;
-
- if (Error == NO_ERROR) {
- (VOID) __DifInstallPostProcess(DeviceInfoSet, DeviceInfoData, Context);
- } else {
- PTCHAR Message;
-
- Message = __GetErrorMessage(Error);
- Log("NOT RUNNING (__DifInstallPreProcess Error: %s)", Message);
- LocalFree(Message);
- }
- }
-
- return Error;
-}
-
-static FORCEINLINE HRESULT
-__DifRemovePreProcess(
- IN HDEVINFO DeviceInfoSet,
- IN PSP_DEVINFO_DATA DeviceInfoData,
- IN PCOINSTALLER_CONTEXT_DATA Context
- )
-{
- HRESULT Error;
- BOOLEAN Success;
- PTCHAR Location;
- PTCHAR SoftwareKeyName;
-
- UNREFERENCED_PARAMETER(Context);
-
- Log("====>");
-
- Location = NULL;
-
- Success = GetLocation(DeviceInfoSet,
- DeviceInfoData,
- &Location);
- if (!Success)
- goto fail1;
-
- SoftwareKeyName = NULL;
-
- Success = FindAliasByLocation(Location,
- &SoftwareKeyName);
-
- if (!Success)
- goto fail2;
-
- if (SoftwareKeyName != NULL) {
- free(SoftwareKeyName);
-
- (VOID) ClearStolenLinkage(DeviceInfoSet,
- DeviceInfoData);
- }
-
- Log("<====");