Dodal sem podporo za nameščanje profilov WLAN. Ampak odstranjevanje kljub mojim velikim naporom še ne deluje.
Verzijo MSICA sem nastavil na 1.0-pre2.
This commit is contained in:
parent
a6584fb3f7
commit
bb5ec43fc9
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -25,6 +25,7 @@ MSICALib/OpFile.cpp -text
|
|||||||
MSICALib/OpReg.cpp -text
|
MSICALib/OpReg.cpp -text
|
||||||
MSICALib/OpSvc.cpp -text
|
MSICALib/OpSvc.cpp -text
|
||||||
MSICALib/OpTS.cpp -text
|
MSICALib/OpTS.cpp -text
|
||||||
|
MSICALib/OpWLAN.cpp -text
|
||||||
MSICALib/stdafx.cpp -text
|
MSICALib/stdafx.cpp -text
|
||||||
MSICALib/stdafx.h -text
|
MSICALib/stdafx.h -text
|
||||||
include/Debug.props -text svneol=unset#text/xml
|
include/Debug.props -text svneol=unset#text/xml
|
||||||
|
@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: MSICA\n"
|
"Project-Id-Version: MSICA\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-03-21 18:37+0100\n"
|
"POT-Creation-Date: 2014-03-22 13:34+0100\n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: \n"
|
||||||
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
|
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
|
||||||
"Language-Team: Amebis, d. o. o., Kamnik <simon.rozman@amebis.si>\n"
|
"Language-Team: Amebis, d. o. o., Kamnik <simon.rozman@amebis.si>\n"
|
||||||
@ -84,6 +84,13 @@ msgstr "Digitalno potrdilo: [1]"
|
|||||||
msgid "Configuring services"
|
msgid "Configuring services"
|
||||||
msgstr "Nastavljanje servisov"
|
msgstr "Nastavljanje servisov"
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:7
|
||||||
|
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:7
|
||||||
|
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:7
|
||||||
|
#: MSIBuild/En.x64.Release.ActionText-2.idtx:7
|
||||||
|
msgid "Evaluating WLAN profiles"
|
||||||
|
msgstr "Pregled profilov WLAN"
|
||||||
|
|
||||||
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:4
|
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:4
|
||||||
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:4
|
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:4
|
||||||
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:4
|
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:4
|
||||||
@ -98,6 +105,13 @@ msgstr "Nameščanje digitalnih potrdil"
|
|||||||
msgid "Registering scheduled tasks"
|
msgid "Registering scheduled tasks"
|
||||||
msgstr "Registracija razporejenih opravil"
|
msgstr "Registracija razporejenih opravil"
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:8
|
||||||
|
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:8
|
||||||
|
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:8
|
||||||
|
#: MSIBuild/En.x64.Release.ActionText-2.idtx:8
|
||||||
|
msgid "Removing WLAN profiles"
|
||||||
|
msgstr "Odstranjevanje profilov WLAN"
|
||||||
|
|
||||||
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:6
|
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:6
|
||||||
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:6
|
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:6
|
||||||
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:6
|
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:6
|
||||||
@ -111,3 +125,25 @@ msgstr "Razporejeno opravilo: [1]"
|
|||||||
#: MSIBuild/En.x64.Release.ActionText-2.idtx:5
|
#: MSIBuild/En.x64.Release.ActionText-2.idtx:5
|
||||||
msgid "Service: [1]"
|
msgid "Service: [1]"
|
||||||
msgstr "Servis: [1]"
|
msgstr "Servis: [1]"
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:9
|
||||||
|
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:9
|
||||||
|
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:9
|
||||||
|
#: MSIBuild/En.x64.Release.ActionText-2.idtx:9
|
||||||
|
msgid "Setting WLAN profiles"
|
||||||
|
msgstr "Nastavljanje profilov WLAN"
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:7
|
||||||
|
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:8
|
||||||
|
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:9
|
||||||
|
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:7
|
||||||
|
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:8
|
||||||
|
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:9
|
||||||
|
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:7
|
||||||
|
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:8
|
||||||
|
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:9
|
||||||
|
#: MSIBuild/En.x64.Release.ActionText-2.idtx:7
|
||||||
|
#: MSIBuild/En.x64.Release.ActionText-2.idtx:8
|
||||||
|
#: MSIBuild/En.x64.Release.ActionText-2.idtx:9
|
||||||
|
msgid "WLAN profile: [1]"
|
||||||
|
msgstr "Profil WLAN: [1]"
|
||||||
|
@ -59,6 +59,11 @@ TaskTrigger DaysOfMonth Y DoubleInteger Specifies the day of the month a ta
|
|||||||
TaskTrigger WeekOfMonth Y Integer 1;2;3;4;5 Specifies the week of the month when the task runs. This value is exclusive and is one of the following: 1=The task will run between the first and seventh day of the month, 2=The task will run between the eighth and 14th day of the month, 3=The task will run between the 15th and 21st day of the month, 4=The task will run between the 22nd and 28th of the month, 5=The task will run between the last seven days of the month.
|
TaskTrigger WeekOfMonth Y Integer 1;2;3;4;5 Specifies the week of the month when the task runs. This value is exclusive and is one of the following: 1=The task will run between the first and seventh day of the month, 2=The task will run between the eighth and 14th day of the month, 3=The task will run between the 15th and 21st day of the month, 4=The task will run between the 22nd and 28th of the month, 5=The task will run between the last seven days of the month.
|
||||||
TaskTrigger MonthsOfYear Y 0 4095 Integer Specifies the month(s) when the task runs. This value is a combination of the following values: 1=Jan, 2=Feb, 4=Mar, 8=Apr, 16=May, 32=Jun, 64=Jul, 128=Aug, 256=Sep, 512=Oct, 1024=Nov, 2048=Dec.
|
TaskTrigger MonthsOfYear Y 0 4095 Integer Specifies the month(s) when the task runs. This value is a combination of the following values: 1=Jan, 2=Feb, 4=Mar, 8=Apr, 16=May, 32=Jun, 64=Jul, 128=Aug, 256=Sep, 512=Oct, 1024=Nov, 2048=Dec.
|
||||||
TaskTrigger Task_ N ScheduledTask 1 Identifier Key of the Trigger's task.
|
TaskTrigger Task_ N ScheduledTask 1 Identifier Key of the Trigger's task.
|
||||||
|
WLANProfile WLANProfile N Identifier Primary key, non-localized token.
|
||||||
|
WLANProfile Name N Formatted Profile name
|
||||||
|
WLANProfile Binary_ N Binary 1 Identifier The profile XML file. The binary information is looked up from the Binary Table.
|
||||||
|
WLANProfile Condition Y Condition Optional expression which skips the profile if evaluates to expFalse. If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.
|
||||||
|
WLANProfile Component_ N Component 1 Identifier Component the profile is part of.
|
||||||
<<NOKEEP
|
<<NOKEEP
|
||||||
|
|
||||||
|
|
||||||
@ -76,6 +81,9 @@ s$(MSIBUILD_LENGTH_ID) L0 L0
|
|||||||
CertificatesExec Installing certificates Certificate: [1]
|
CertificatesExec Installing certificates Certificate: [1]
|
||||||
ServiceConfigExec Configuring services Service: [1]
|
ServiceConfigExec Configuring services Service: [1]
|
||||||
ScheduledTasksExec Registering scheduled tasks Scheduled task: [1]
|
ScheduledTasksExec Registering scheduled tasks Scheduled task: [1]
|
||||||
|
EvaluateWLANProfiles Evaluating WLAN profiles WLAN profile: [1]
|
||||||
|
RemoveWLANProfilesExec Removing WLAN profiles WLAN profile: [1]
|
||||||
|
SetWLANProfilesExec Setting WLAN profiles WLAN profile: [1]
|
||||||
<<NOKEEP
|
<<NOKEEP
|
||||||
|
|
||||||
"De.$(PLAT).$(CFG).ActionText-2.idt" : "En.$(PLAT).$(CFG).ActionText-2.idtx" "..\L10N\de_DE.po"
|
"De.$(PLAT).$(CFG).ActionText-2.idt" : "En.$(PLAT).$(CFG).ActionText-2.idtx" "..\L10N\de_DE.po"
|
||||||
@ -148,6 +156,13 @@ ScheduledTasksEval 1 binMSICA.dll ScheduledTasksEval
|
|||||||
ScheduledTasksExec 3073 binMSICA.dll ExecuteSequence
|
ScheduledTasksExec 3073 binMSICA.dll ExecuteSequence
|
||||||
ScheduledTasksRollback 3329 binMSICA.dll ExecuteSequence
|
ScheduledTasksRollback 3329 binMSICA.dll ExecuteSequence
|
||||||
ScheduledTasksCommit 3585 binMSICA.dll ExecuteSequence
|
ScheduledTasksCommit 3585 binMSICA.dll ExecuteSequence
|
||||||
|
EvaluateWLANProfiles 1 binMSICA.dll EvaluateWLANProfiles
|
||||||
|
RemoveWLANProfilesExec 3073 binMSICA.dll ExecuteSequence
|
||||||
|
RemoveWLANProfilesRollback 3329 binMSICA.dll ExecuteSequence
|
||||||
|
RemoveWLANProfilesCommit 3585 binMSICA.dll ExecuteSequence
|
||||||
|
SetWLANProfilesExec 3073 binMSICA.dll ExecuteSequence
|
||||||
|
SetWLANProfilesRollback 3329 binMSICA.dll ExecuteSequence
|
||||||
|
SetWLANProfilesCommit 3585 binMSICA.dll ExecuteSequence
|
||||||
<<NOKEEP
|
<<NOKEEP
|
||||||
|
|
||||||
|
|
||||||
@ -162,6 +177,13 @@ All :: "$(LANG).$(PLAT).$(CFG).InstallExecuteSequence-1.idt"
|
|||||||
Action Condition Sequence
|
Action Condition Sequence
|
||||||
s$(MSIBUILD_LENGTH_ID) S255 I2
|
s$(MSIBUILD_LENGTH_ID) S255 I2
|
||||||
InstallExecuteSequence Action
|
InstallExecuteSequence Action
|
||||||
|
EvaluateWLANProfiles 1650
|
||||||
|
RemoveWLANProfilesRollback 1850
|
||||||
|
RemoveWLANProfilesExec 1851
|
||||||
|
RemoveWLANProfilesCommit 1852
|
||||||
|
SetWLANProfilesRollback 6150
|
||||||
|
SetWLANProfilesExec 6151
|
||||||
|
SetWLANProfilesCommit 6152
|
||||||
CertificatesEval 6576
|
CertificatesEval 6576
|
||||||
CertificatesRollback 6577
|
CertificatesRollback 6577
|
||||||
CertificatesExec 6578
|
CertificatesExec 6578
|
||||||
@ -219,6 +241,20 @@ TaskTrigger Trigger
|
|||||||
<<NOKEEP
|
<<NOKEEP
|
||||||
|
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# WLANProfile
|
||||||
|
|
||||||
|
All :: "$(LANG).$(PLAT).$(CFG).WLANProfile-1.idt"
|
||||||
|
|
||||||
|
"$(LANG).$(PLAT).$(CFG).WLANProfile-1.idt" : "Makefile" "..\..\..\include\MSIBuildCfg.mak"
|
||||||
|
-if exist $@ del /f /q $@
|
||||||
|
move /y << $@ > NUL
|
||||||
|
WLANProfile Name Binary_ Condition Component_
|
||||||
|
s$(MSIBUILD_LENGTH_ID) l255 s$(MSIBUILD_LENGTH_ID) S255 s$(MSIBUILD_LENGTH_ID)
|
||||||
|
WLANProfile WLANProfile
|
||||||
|
<<NOKEEP
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Build MSM module!
|
# Build MSM module!
|
||||||
######################################################################
|
######################################################################
|
||||||
|
202
MSICA/MSICA.cpp
202
MSICA/MSICA.cpp
@ -1,15 +1,18 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
#pragma comment(lib, "wlanapi.lib")
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// Local constants
|
// Local constants
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#define MSICA_CERT_TICK_SIZE (4*1024)
|
#define MSICA_CERT_TICK_SIZE ( 4*1024)
|
||||||
#define MSICA_SVC_SET_START_TICK_SIZE (1*1024)
|
#define MSICA_SVC_SET_START_TICK_SIZE ( 1*1024)
|
||||||
#define MSICA_SVC_START_TICK_SIZE (1*1024)
|
#define MSICA_SVC_START_TICK_SIZE ( 1*1024)
|
||||||
#define MSICA_SVC_STOP_TICK_SIZE (1*1024)
|
#define MSICA_SVC_STOP_TICK_SIZE ( 1*1024)
|
||||||
#define MSICA_TASK_TICK_SIZE (16*1024)
|
#define MSICA_TASK_TICK_SIZE (16*1024)
|
||||||
|
#define MSICA_WLAN_PROFILE_TICK_SIZE ( 2*1024)
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
@ -63,7 +66,6 @@ UINT MSICA_API CertificatesEval(MSIHANDLE hInstall)
|
|||||||
// Execute query!
|
// Execute query!
|
||||||
uiResult = ::MsiViewExecute(hViewCert, NULL);
|
uiResult = ::MsiViewExecute(hViewCert, NULL);
|
||||||
if (uiResult == NO_ERROR) {
|
if (uiResult == NO_ERROR) {
|
||||||
//ATL::CAtlString sComponent;
|
|
||||||
ATL::CAtlStringW sStore;
|
ATL::CAtlStringW sStore;
|
||||||
int iFlags, iEncoding;
|
int iFlags, iEncoding;
|
||||||
ATL::CAtlArray<BYTE> binCert;
|
ATL::CAtlArray<BYTE> binCert;
|
||||||
@ -449,6 +451,196 @@ UINT MSICA_API ScheduledTasksEval(MSIHANDLE hInstall)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UINT MSICA_API EvaluateWLANProfiles(MSIHANDLE hInstall)
|
||||||
|
{
|
||||||
|
//::MessageBox(NULL, _T(__FUNCTION__), _T("MSICA"), MB_OK);
|
||||||
|
|
||||||
|
UINT uiResult;
|
||||||
|
BOOL bIsCoInitialized = SUCCEEDED(::CoInitialize(NULL));
|
||||||
|
MSICA::COpList olExecuteInstall, olExecuteRemove;
|
||||||
|
BOOL bRollbackEnabled;
|
||||||
|
PMSIHANDLE
|
||||||
|
hDatabase,
|
||||||
|
hRecordProg = ::MsiCreateRecord(3);
|
||||||
|
ATL::CAtlString sValue;
|
||||||
|
|
||||||
|
// Check and add the rollback enabled state.
|
||||||
|
uiResult = ::MsiGetProperty(hInstall, _T("RollbackDisabled"), sValue);
|
||||||
|
bRollbackEnabled = uiResult == NO_ERROR ?
|
||||||
|
_ttoi(sValue) || !sValue.IsEmpty() && _totlower(sValue.GetAt(0)) == _T('y') ? FALSE : TRUE :
|
||||||
|
TRUE;
|
||||||
|
olExecuteInstall.AddTail(new MSICA::COpRollbackEnable(bRollbackEnabled));
|
||||||
|
olExecuteRemove.AddTail(new MSICA::COpRollbackEnable(bRollbackEnabled));
|
||||||
|
|
||||||
|
// Open MSI database.
|
||||||
|
hDatabase = ::MsiGetActiveDatabase(hInstall);
|
||||||
|
if (hDatabase) {
|
||||||
|
// Check if WLANProfile table exists. If it doesn't exist, there's nothing to do.
|
||||||
|
MSICONDITION condition = ::MsiDatabaseIsTablePersistent(hDatabase, _T("WLANProfile"));
|
||||||
|
if (condition == MSICONDITION_FALSE || condition == MSICONDITION_TRUE) {
|
||||||
|
PMSIHANDLE hViewProfile;
|
||||||
|
|
||||||
|
// Prepare a query to get a list/view of profiles.
|
||||||
|
uiResult = ::MsiDatabaseOpenView(hDatabase, _T("SELECT Binary_,Name,Condition,Component_ FROM WLANProfile"), &hViewProfile);
|
||||||
|
if (uiResult == NO_ERROR) {
|
||||||
|
// Execute query!
|
||||||
|
uiResult = ::MsiViewExecute(hViewProfile, NULL);
|
||||||
|
if (uiResult == NO_ERROR) {
|
||||||
|
DWORD dwError, dwNegotiatedVersion;
|
||||||
|
HANDLE hClientHandle;
|
||||||
|
|
||||||
|
// Open WLAN handle.
|
||||||
|
dwError = ::WlanOpenHandle(2, NULL, &dwNegotiatedVersion, &hClientHandle);
|
||||||
|
if (dwError == NO_ERROR) {
|
||||||
|
WLAN_INTERFACE_INFO_LIST *pInterfaceList;
|
||||||
|
|
||||||
|
// Get a list of WLAN interfaces.
|
||||||
|
dwError = ::WlanEnumInterfaces(hClientHandle, NULL, &pInterfaceList);
|
||||||
|
if (dwError == NO_ERROR) {
|
||||||
|
ATL::CAtlStringW sName, sProfileXML;
|
||||||
|
ATL::CAtlArray<BYTE> binProfile;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
PMSIHANDLE hRecord;
|
||||||
|
INSTALLSTATE iInstalled, iAction;
|
||||||
|
int iTick = 0;
|
||||||
|
DWORD i;
|
||||||
|
|
||||||
|
// Fetch one record from the view.
|
||||||
|
uiResult = ::MsiViewFetch(hViewProfile, &hRecord);
|
||||||
|
if (uiResult == ERROR_NO_MORE_ITEMS) {
|
||||||
|
uiResult = NO_ERROR;
|
||||||
|
break;
|
||||||
|
} else if (uiResult != NO_ERROR)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Read and evaluate profile's condition.
|
||||||
|
uiResult = ::MsiRecordGetString(hRecord, 3, sValue);
|
||||||
|
if (uiResult != NO_ERROR) break;
|
||||||
|
condition = ::MsiEvaluateCondition(hInstall, sValue);
|
||||||
|
if (condition == MSICONDITION_FALSE)
|
||||||
|
continue;
|
||||||
|
else if (condition == MSICONDITION_ERROR) {
|
||||||
|
uiResult = ERROR_INVALID_FIELD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read profile's name.
|
||||||
|
uiResult = ::MsiRecordGetString(hRecord, 2, sName);
|
||||||
|
if (uiResult != NO_ERROR) break;
|
||||||
|
|
||||||
|
// Read profile's component ID.
|
||||||
|
uiResult = ::MsiRecordGetString(hRecord, 4, sValue);
|
||||||
|
if (uiResult != NO_ERROR) break;
|
||||||
|
|
||||||
|
// Get the component state.
|
||||||
|
uiResult = ::MsiGetComponentState(hInstall, sValue, &iInstalled, &iAction);
|
||||||
|
if (uiResult != NO_ERROR) break;
|
||||||
|
|
||||||
|
if (iAction >= INSTALLSTATE_LOCAL) {
|
||||||
|
PMSIHANDLE hViewBinary, hRecordBin;
|
||||||
|
LPCWSTR pProfileStr;
|
||||||
|
SIZE_T nCount;
|
||||||
|
|
||||||
|
// Perform another query to get profile's binary data.
|
||||||
|
uiResult = ::MsiDatabaseOpenView(hDatabase, _T("SELECT Data FROM Binary WHERE Name=?"), &hViewBinary);
|
||||||
|
if (uiResult != NO_ERROR) break;
|
||||||
|
|
||||||
|
// Execute query!
|
||||||
|
uiResult = ::MsiViewExecute(hViewBinary, hRecord);
|
||||||
|
if (uiResult != NO_ERROR) break;
|
||||||
|
|
||||||
|
// Fetch one record from the view.
|
||||||
|
uiResult = ::MsiViewFetch(hViewBinary, &hRecordBin);
|
||||||
|
if (uiResult == NO_ERROR)
|
||||||
|
uiResult = ::MsiRecordGetStream(hRecordBin, 1, binProfile);
|
||||||
|
::MsiViewClose(hViewBinary);
|
||||||
|
if (uiResult != NO_ERROR) break;
|
||||||
|
|
||||||
|
// Convert CAtlArray<BYTE> to CAtlStringW.
|
||||||
|
pProfileStr = (LPCWSTR)binProfile.GetData();
|
||||||
|
nCount = binProfile.GetCount()/sizeof(WCHAR);
|
||||||
|
|
||||||
|
if (nCount < 1 || pProfileStr[0] != 0xfeff) {
|
||||||
|
// The profile XML is not UTF-16 encoded.
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_WLAN_PROFILE_NOT_UTF16);
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 2, sName );
|
||||||
|
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
uiResult = ERROR_INSTALL_USEREXIT;
|
||||||
|
}
|
||||||
|
sProfileXML.SetString(pProfileStr + 1, (int)nCount - 1);
|
||||||
|
|
||||||
|
for (i = 0; i < pInterfaceList->dwNumberOfItems; i++) {
|
||||||
|
// Check for not ready state in interface.
|
||||||
|
if (pInterfaceList->InterfaceInfo[i].isState != wlan_interface_state_not_ready) {
|
||||||
|
olExecuteInstall.AddTail(new MSICA::COpWLANProfileSet(pInterfaceList->InterfaceInfo[i].InterfaceGuid, sName, sProfileXML, MSICA_WLAN_PROFILE_TICK_SIZE));
|
||||||
|
iTick += MSICA_WLAN_PROFILE_TICK_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The amount of tick space to add for each profile to progress indicator.
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, 3 );
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 2, iTick);
|
||||||
|
if (::MsiProcessMessage(hInstall, INSTALLMESSAGE_PROGRESS, hRecordProg) == IDCANCEL) { uiResult = ERROR_INSTALL_USEREXIT; break; }
|
||||||
|
} else if (iAction >= INSTALLSTATE_REMOVED) {
|
||||||
|
// Component is installed, but should be degraded to advertised/removed. Delete the profile from all interfaces.
|
||||||
|
for (i = 0; i < pInterfaceList->dwNumberOfItems; i++) {
|
||||||
|
// Check for not ready state in interface.
|
||||||
|
if (pInterfaceList->InterfaceInfo[i].isState != wlan_interface_state_not_ready) {
|
||||||
|
olExecuteRemove.AddTail(new MSICA::COpWLANProfileDelete(pInterfaceList->InterfaceInfo[i].InterfaceGuid, sName, MSICA_WLAN_PROFILE_TICK_SIZE));
|
||||||
|
iTick += MSICA_WLAN_PROFILE_TICK_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The amount of tick space to add for each profile to progress indicator.
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, 3 );
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 2, iTick);
|
||||||
|
if (::MsiProcessMessage(hInstall, INSTALLMESSAGE_PROGRESS, hRecordProg) == IDCANCEL) { uiResult = ERROR_INSTALL_USEREXIT; break; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::WlanFreeMemory(pInterfaceList);
|
||||||
|
}
|
||||||
|
::WlanCloseHandle(hClientHandle, NULL);
|
||||||
|
} else {
|
||||||
|
uiResult = ERROR_INSTALL_WLAN_HANDLE_OPEN;
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 2, dwError);
|
||||||
|
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
}
|
||||||
|
::MsiViewClose(hViewProfile);
|
||||||
|
|
||||||
|
if (uiResult == NO_ERROR) {
|
||||||
|
// Save the sequences.
|
||||||
|
uiResult = MSICA::SaveSequence(hInstall, _T("SetWLANProfilesExec"), _T("SetWLANProfilesCommit"), _T("SetWLANProfilesRollback"), olExecuteInstall);
|
||||||
|
uiResult = MSICA::SaveSequence(hInstall, _T("RemoveWLANProfilesExec"), _T("RemoveWLANProfilesCommit"), _T("RemoveWLANProfilesRollback"), olExecuteRemove);
|
||||||
|
} else if (uiResult != ERROR_INSTALL_USEREXIT) {
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_OPLIST_CREATE);
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 2, uiResult );
|
||||||
|
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
|
||||||
|
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
|
||||||
|
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uiResult = ERROR_INSTALL_DATABASE_OPEN;
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
|
||||||
|
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
}
|
||||||
|
|
||||||
|
olExecuteInstall.Free();
|
||||||
|
olExecuteRemove.Free();
|
||||||
|
|
||||||
|
if (bIsCoInitialized) ::CoUninitialize();
|
||||||
|
return uiResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
UINT MSICA_API ExecuteSequence(MSIHANDLE hInstall)
|
UINT MSICA_API ExecuteSequence(MSIHANDLE hInstall)
|
||||||
{
|
{
|
||||||
//::MessageBox(NULL, _T(__FUNCTION__), _T("MSICA"), MB_OK);
|
//::MessageBox(NULL, _T(__FUNCTION__), _T("MSICA"), MB_OK);
|
||||||
|
@ -27,6 +27,9 @@ extern "C" {
|
|||||||
UINT MSICA_API CertificatesEval(MSIHANDLE hInstall);
|
UINT MSICA_API CertificatesEval(MSIHANDLE hInstall);
|
||||||
UINT MSICA_API ServiceConfigEval(MSIHANDLE hInstall);
|
UINT MSICA_API ServiceConfigEval(MSIHANDLE hInstall);
|
||||||
UINT MSICA_API ScheduledTasksEval(MSIHANDLE hInstall);
|
UINT MSICA_API ScheduledTasksEval(MSIHANDLE hInstall);
|
||||||
|
UINT MSICA_API EvaluateWLANProfiles(MSIHANDLE hInstall);
|
||||||
|
UINT MSICA_API RemoveWLANProfiles(MSIHANDLE hInstall);
|
||||||
|
UINT MSICA_API SetWLANProfiles(MSIHANDLE hInstall);
|
||||||
UINT MSICA_API ExecuteSequence(MSIHANDLE hInstall);
|
UINT MSICA_API ExecuteSequence(MSIHANDLE hInstall);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include <corerror.h>
|
#include <corerror.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <wlanapi.h>
|
||||||
|
|
||||||
#include "..\MSICALib\MSICALib.h"
|
#include "..\MSICALib\MSICALib.h"
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: MSICALib\n"
|
"Project-Id-Version: MSICALib\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-03-21 18:37+0100\n"
|
"POT-Creation-Date: 2014-03-22 13:35+0100\n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: \n"
|
||||||
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
|
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
|
||||||
"Language-Team: Amebis, d. o. o., Kamnik <simon.rozman@amebis.si>\n"
|
"Language-Team: Amebis, d. o. o., Kamnik <simon.rozman@amebis.si>\n"
|
||||||
@ -26,12 +26,19 @@ msgstr "1250"
|
|||||||
#: MSIBuild/En.Win32.Debug.Error-2.idtx:5
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:5
|
||||||
#: MSIBuild/En.Win32.Release.Error-2.idtx:5
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:5
|
||||||
#: MSIBuild/En.x64.Debug.Error-2.idtx:5 MSIBuild/En.x64.Release.Error-2.idtx:5
|
#: MSIBuild/En.x64.Debug.Error-2.idtx:5 MSIBuild/En.x64.Release.Error-2.idtx:5
|
||||||
msgid ""
|
msgid "Error [2] creating task list. Please, contact your support personnel."
|
||||||
"Error [2] creating scheduled task list. Please, contact your support "
|
|
||||||
"personnel."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pri pripravi seznama razvrščenih opravil je prišlo do napake [2]. Obrnite se "
|
"Pri pripravi seznama opravil je prišlo do napake [2]. Obrnite se na svojo "
|
||||||
"na svojo tehnično službo."
|
"tehnično službo."
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:20
|
||||||
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:20
|
||||||
|
#: MSIBuild/En.x64.Debug.Error-2.idtx:20
|
||||||
|
#: MSIBuild/En.x64.Release.Error-2.idtx:20
|
||||||
|
msgid "Error [2] opening WLAN handle. Please, contact your support personnel."
|
||||||
|
msgstr ""
|
||||||
|
"Pri odpiranju ročica WLAN je prišlo do napake [2]. Obrnite se na svojo "
|
||||||
|
"tehnično službo."
|
||||||
|
|
||||||
#: MSIBuild/En.Win32.Debug.Error-2.idtx:17
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:17
|
||||||
#: MSIBuild/En.Win32.Release.Error-2.idtx:17
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:17
|
||||||
@ -168,6 +175,17 @@ msgstr ""
|
|||||||
"Pri kopiranju razporejenega opravila »[2]« v »[3]« je prišlo do napake [4]. "
|
"Pri kopiranju razporejenega opravila »[2]« v »[3]« je prišlo do napake [4]. "
|
||||||
"Obrnite se na svojo tehnično službo."
|
"Obrnite se na svojo tehnično službo."
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:22
|
||||||
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:22
|
||||||
|
#: MSIBuild/En.x64.Debug.Error-2.idtx:22
|
||||||
|
#: MSIBuild/En.x64.Release.Error-2.idtx:22
|
||||||
|
msgid ""
|
||||||
|
"Error [4] deleting profile \"[3]\" on WLAN interface [2]. Please, contact "
|
||||||
|
"your support personnel."
|
||||||
|
msgstr ""
|
||||||
|
"Pri brisanju profila »[3]« na vmesniku WLAN [2] je prišlo do napake [4]. "
|
||||||
|
"Obrnite se na svojo tehnično službo."
|
||||||
|
|
||||||
#: MSIBuild/En.Win32.Debug.Error-2.idtx:10
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:10
|
||||||
#: MSIBuild/En.Win32.Release.Error-2.idtx:10
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:10
|
||||||
#: MSIBuild/En.x64.Debug.Error-2.idtx:10
|
#: MSIBuild/En.x64.Debug.Error-2.idtx:10
|
||||||
@ -179,6 +197,28 @@ msgstr ""
|
|||||||
"Pri premikanju datoteke »[2]« v »[3]« je prišlo do napake [4]. Obrnite se na "
|
"Pri premikanju datoteke »[2]« v »[3]« je prišlo do napake [4]. Obrnite se na "
|
||||||
"svojo tehnično službo."
|
"svojo tehnično službo."
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:23
|
||||||
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:23
|
||||||
|
#: MSIBuild/En.x64.Debug.Error-2.idtx:23
|
||||||
|
#: MSIBuild/En.x64.Release.Error-2.idtx:23
|
||||||
|
msgid ""
|
||||||
|
"Error [5] renaming profile \"[3]\" to \"[4]\" on WLAN interface [2]. Please, "
|
||||||
|
"contact your support personnel."
|
||||||
|
msgstr ""
|
||||||
|
"Pri preimenovanju profila »[3]« v »[4]« na vmesniku WLAN [2] je prišlo do "
|
||||||
|
"napake [5]. Obrnite se na svojo tehnično službo."
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:24
|
||||||
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:24
|
||||||
|
#: MSIBuild/En.x64.Debug.Error-2.idtx:24
|
||||||
|
#: MSIBuild/En.x64.Release.Error-2.idtx:24
|
||||||
|
msgid ""
|
||||||
|
"Error [5] setting profile \"[3]\" on WLAN interface [2] (WLAN reason is "
|
||||||
|
"[4]). Please, contact your support personnel."
|
||||||
|
msgstr ""
|
||||||
|
"Pri nastavljanju profila »[3]« na vmesniku WLAN [2] je prišlo do napake [5] "
|
||||||
|
"(vzrok WLAN je [4]). Obrnite se na svojo tehnično službo."
|
||||||
|
|
||||||
#: MSIBuild/En.Win32.Debug.Error-2.idtx:4
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:4
|
||||||
#: MSIBuild/En.Win32.Release.Error-2.idtx:4
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:4
|
||||||
#: MSIBuild/En.x64.Debug.Error-2.idtx:4 MSIBuild/En.x64.Release.Error-2.idtx:4
|
#: MSIBuild/En.x64.Debug.Error-2.idtx:4 MSIBuild/En.x64.Release.Error-2.idtx:4
|
||||||
@ -187,3 +227,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Pri odpiranju namestitvenega paketa je prišlo do napake. Obrnite se na svojo "
|
"Pri odpiranju namestitvenega paketa je prišlo do napake. Obrnite se na svojo "
|
||||||
"tehnično službo."
|
"tehnično službo."
|
||||||
|
|
||||||
|
#: MSIBuild/En.Win32.Debug.Error-2.idtx:21
|
||||||
|
#: MSIBuild/En.Win32.Release.Error-2.idtx:21
|
||||||
|
#: MSIBuild/En.x64.Debug.Error-2.idtx:21
|
||||||
|
#: MSIBuild/En.x64.Release.Error-2.idtx:21
|
||||||
|
msgid ""
|
||||||
|
"WLAN profile \"[2]\" XML data is not UTF-16 encoded. Please, contact your "
|
||||||
|
"support personnel."
|
||||||
|
msgstr ""
|
||||||
|
"Zapis XML profila WLAN »[2]« ni zapisan v UTF-16. Obrnite se na svojo "
|
||||||
|
"tehnično službo."
|
||||||
|
@ -25,7 +25,7 @@ Error Message
|
|||||||
i2 L0
|
i2 L0
|
||||||
1252 Error Error
|
1252 Error Error
|
||||||
2550 Error opening installation package. Please, contact your support personnel.
|
2550 Error opening installation package. Please, contact your support personnel.
|
||||||
2551 Error [2] creating scheduled task list. Please, contact your support personnel.
|
2551 Error [2] creating task list. Please, contact your support personnel.
|
||||||
2552 Error [3] writing to "[2]" task list file. Please, contact your support personnel.
|
2552 Error [3] writing to "[2]" task list file. Please, contact your support personnel.
|
||||||
2560 Error [3] reading from "[2]" task list file. Please, contact your support personnel.
|
2560 Error [3] reading from "[2]" task list file. Please, contact your support personnel.
|
||||||
2553 Error [3] setting "[2]" parameter. Please, contact your support personnel.
|
2553 Error [3] setting "[2]" parameter. Please, contact your support personnel.
|
||||||
@ -40,6 +40,11 @@ i2 L0
|
|||||||
2571 Error [3] changing service "[2]" start type. Please, contact your support personnel.
|
2571 Error [3] changing service "[2]" start type. Please, contact your support personnel.
|
||||||
2572 Error [3] starting service "[2]". Please, contact your support personnel.
|
2572 Error [3] starting service "[2]". Please, contact your support personnel.
|
||||||
2573 Error [3] stopping service "[2]". Please, contact your support personnel.
|
2573 Error [3] stopping service "[2]". Please, contact your support personnel.
|
||||||
|
2577 Error [2] opening WLAN handle. Please, contact your support personnel.
|
||||||
|
2578 WLAN profile "[2]" XML data is not UTF-16 encoded. Please, contact your support personnel.
|
||||||
|
2574 Error [4] deleting profile "[3]" on WLAN interface [2]. Please, contact your support personnel.
|
||||||
|
2575 Error [5] renaming profile "[3]" to "[4]" on WLAN interface [2]. Please, contact your support personnel.
|
||||||
|
2576 Error [5] setting profile "[3]" on WLAN interface [2] (WLAN reason is [4]). Please, contact your support personnel.
|
||||||
<<NOKEEP
|
<<NOKEEP
|
||||||
|
|
||||||
"De.$(PLAT).$(CFG).Error-2.idt" : "En.$(PLAT).$(CFG).Error-2.idtx" "..\L10N\de_DE.po"
|
"De.$(PLAT).$(CFG).Error-2.idt" : "En.$(PLAT).$(CFG).Error-2.idtx" "..\L10N\de_DE.po"
|
||||||
|
@ -200,7 +200,7 @@ UINT SaveSequence(MSIHANDLE hInstall, LPCTSTR szActionExecute, LPCTSTR szActionC
|
|||||||
{
|
{
|
||||||
LPTSTR szBuffer = sSequenceFilename.GetBuffer(MAX_PATH);
|
LPTSTR szBuffer = sSequenceFilename.GetBuffer(MAX_PATH);
|
||||||
::GetTempPath(MAX_PATH, szBuffer);
|
::GetTempPath(MAX_PATH, szBuffer);
|
||||||
::GetTempFileName(szBuffer, _T("TS"), 0, szBuffer);
|
::GetTempFileName(szBuffer, _T("MSICA"), 0, szBuffer);
|
||||||
sSequenceFilename.ReleaseBuffer();
|
sSequenceFilename.ReleaseBuffer();
|
||||||
}
|
}
|
||||||
// Save execute sequence to file.
|
// Save execute sequence to file.
|
||||||
|
@ -12,33 +12,38 @@
|
|||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Error codes (next unused 2574L)
|
// Error codes (next unused 2579L)
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#define ERROR_INSTALL_DATABASE_OPEN 2550L
|
#define ERROR_INSTALL_DATABASE_OPEN 2550L
|
||||||
#define ERROR_INSTALL_OPLIST_CREATE 2551L
|
#define ERROR_INSTALL_OPLIST_CREATE 2551L
|
||||||
#define ERROR_INSTALL_PROPERTY_SET 2553L
|
#define ERROR_INSTALL_PROPERTY_SET 2553L
|
||||||
#define ERROR_INSTALL_SCRIPT_WRITE 2552L
|
#define ERROR_INSTALL_SCRIPT_WRITE 2552L
|
||||||
#define ERROR_INSTALL_SCRIPT_READ 2560L
|
#define ERROR_INSTALL_SCRIPT_READ 2560L
|
||||||
#define ERROR_INSTALL_FILE_DELETE_FAILED 2554L
|
#define ERROR_INSTALL_FILE_DELETE 2554L
|
||||||
#define ERROR_INSTALL_FILE_MOVE_FAILED 2555L
|
#define ERROR_INSTALL_FILE_MOVE 2555L
|
||||||
#define ERROR_INSTALL_REGKEY_CREATE_FAILED 2561L
|
#define ERROR_INSTALL_REGKEY_CREATE 2561L
|
||||||
#define ERROR_INSTALL_REGKEY_COPY_FAILED 2562L
|
#define ERROR_INSTALL_REGKEY_COPY 2562L
|
||||||
#define ERROR_INSTALL_REGKEY_PROBING_FAILED 2563L
|
#define ERROR_INSTALL_REGKEY_PROBING 2563L
|
||||||
#define ERROR_INSTALL_REGKEY_DELETE_FAILED 2564L
|
#define ERROR_INSTALL_REGKEY_DELETE 2564L
|
||||||
#define ERROR_INSTALL_REGKEY_SETVALUE_FAILED 2565L
|
#define ERROR_INSTALL_REGKEY_SETVALUE 2565L
|
||||||
#define ERROR_INSTALL_REGKEY_DELETEVALUE_FAILED 2567L
|
#define ERROR_INSTALL_REGKEY_DELETEVALUE 2567L
|
||||||
#define ERROR_INSTALL_REGKEY_COPYVALUE_FAILED 2568L
|
#define ERROR_INSTALL_REGKEY_COPYVALUE 2568L
|
||||||
#define ERROR_INSTALL_REGKEY_PROBINGVAL_FAILED 2566L
|
#define ERROR_INSTALL_REGKEY_PROBINGVAL 2566L
|
||||||
#define ERROR_INSTALL_TASK_CREATE_FAILED 2556L
|
#define ERROR_INSTALL_TASK_CREATE 2556L
|
||||||
#define ERROR_INSTALL_TASK_DELETE_FAILED 2557L
|
#define ERROR_INSTALL_TASK_DELETE 2557L
|
||||||
#define ERROR_INSTALL_TASK_ENABLE_FAILED 2558L
|
#define ERROR_INSTALL_TASK_ENABLE 2558L
|
||||||
#define ERROR_INSTALL_TASK_COPY_FAILED 2559L
|
#define ERROR_INSTALL_TASK_COPY 2559L
|
||||||
#define ERROR_INSTALL_CERT_INSTALL_FAILED 2569L
|
#define ERROR_INSTALL_CERT_INSTALL 2569L
|
||||||
#define ERROR_INSTALL_CERT_REMOVE_FAILED 2570L
|
#define ERROR_INSTALL_CERT_REMOVE 2570L
|
||||||
#define ERROR_INSTALL_SVC_SET_START_FAILED 2571L
|
#define ERROR_INSTALL_SVC_SET_START 2571L
|
||||||
#define ERROR_INSTALL_SVC_START_FAILED 2572L
|
#define ERROR_INSTALL_SVC_START 2572L
|
||||||
#define ERROR_INSTALL_SVC_STOP_FAILED 2573L
|
#define ERROR_INSTALL_SVC_STOP 2573L
|
||||||
|
#define ERROR_INSTALL_WLAN_HANDLE_OPEN 2577L
|
||||||
|
#define ERROR_INSTALL_WLAN_PROFILE_NOT_UTF16 2578L
|
||||||
|
#define ERROR_INSTALL_WLAN_PROFILE_DELETE 2574L
|
||||||
|
#define ERROR_INSTALL_WLAN_PROFILE_RENAME 2575L
|
||||||
|
#define ERROR_INSTALL_WLAN_PROFILE_SET 2576L
|
||||||
|
|
||||||
|
|
||||||
namespace MSICA {
|
namespace MSICA {
|
||||||
@ -519,6 +524,71 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// COpWLANProfile
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class COpWLANProfile : public COpTypeSingleString
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
COpWLANProfile(const GUID &guidInterface = GUID_NULL, LPCWSTR pszProfileName = L"", int iTicks = 0);
|
||||||
|
|
||||||
|
friend inline HRESULT operator <<(ATL::CAtlFile &f, const COpWLANProfile &op);
|
||||||
|
friend inline HRESULT operator >>(ATL::CAtlFile &f, COpWLANProfile &op);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
GUID m_guidInterface;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// COpWLANProfileDelete
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class COpWLANProfileDelete : public COpWLANProfile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
COpWLANProfileDelete(const GUID &guidInterface = GUID_NULL, LPCWSTR pszProfileName = L"", int iTicks = 0);
|
||||||
|
virtual HRESULT Execute(CSession *pSession);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// COpWLANProfileRename
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class COpWLANProfileRename : public COpWLANProfile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
COpWLANProfileRename(const GUID &guidInterface = GUID_NULL, LPCWSTR pszProfileNameSrc = L"", LPCWSTR pszProfileNameDst = L"", int iTicks = 0);
|
||||||
|
virtual HRESULT Execute(CSession *pSession);
|
||||||
|
|
||||||
|
friend inline HRESULT operator <<(ATL::CAtlFile &f, const COpWLANProfileRename &op);
|
||||||
|
friend inline HRESULT operator >>(ATL::CAtlFile &f, COpWLANProfileRename &op);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ATL::CAtlStringW m_sProfileNameDst;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// COpWLANProfileSet
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class COpWLANProfileSet : public COpWLANProfile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
COpWLANProfileSet(const GUID &guidInterface = GUID_NULL, LPCWSTR pszProfileName = L"", LPCWSTR pszProfileXML = L"", int iTicks = 0);
|
||||||
|
virtual HRESULT Execute(CSession *pSession);
|
||||||
|
|
||||||
|
friend inline HRESULT operator <<(ATL::CAtlFile &f, const COpWLANProfileSet &op);
|
||||||
|
friend inline HRESULT operator >>(ATL::CAtlFile &f, COpWLANProfileSet &op);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ATL::CAtlStringW m_sProfileXML;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// COpList
|
// COpList
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
@ -557,6 +627,9 @@ protected:
|
|||||||
OP_SVC_SET_START,
|
OP_SVC_SET_START,
|
||||||
OP_SVC_START,
|
OP_SVC_START,
|
||||||
OP_SVC_STOP,
|
OP_SVC_STOP,
|
||||||
|
OP_WLAN_PROFILE_DELETE,
|
||||||
|
OP_WLAN_PROFILE_RENAME,
|
||||||
|
OP_WLAN_PROFILE_SET,
|
||||||
OP_SUBLIST
|
OP_SUBLIST
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -608,6 +681,32 @@ UINT ExecuteSequence(MSIHANDLE hInstall);
|
|||||||
// Inline helper functions
|
// Inline helper functions
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
namespace MSICA {
|
||||||
|
|
||||||
|
inline VOID GuidToString(const GUID &guid, ATL::CAtlStringA &str)
|
||||||
|
{
|
||||||
|
str.Format("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
|
||||||
|
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]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline VOID GuidToString(const GUID &guid, ATL::CAtlStringW &str)
|
||||||
|
{
|
||||||
|
str.Format(L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
|
||||||
|
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]);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace MSICA
|
||||||
|
|
||||||
|
|
||||||
inline UINT MsiGetPropertyA(MSIHANDLE hInstall, LPCSTR szName, ATL::CAtlStringA &sValue)
|
inline UINT MsiGetPropertyA(MSIHANDLE hInstall, LPCSTR szName, ATL::CAtlStringA &sValue)
|
||||||
{
|
{
|
||||||
DWORD dwSize = 0;
|
DWORD dwSize = 0;
|
||||||
@ -955,6 +1054,26 @@ inline HRESULT operator >>(ATL::CAtlFile &f, DWORDLONG &i)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline HRESULT operator <<(ATL::CAtlFile &f, const GUID &guid)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
DWORD dwWritten;
|
||||||
|
|
||||||
|
hr = f.Write(&guid, sizeof(GUID), &dwWritten);
|
||||||
|
return SUCCEEDED(hr) ? dwWritten == sizeof(GUID) ? hr : E_FAIL : hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline HRESULT operator >>(ATL::CAtlFile &f, GUID &guid)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
DWORD dwRead;
|
||||||
|
|
||||||
|
hr = f.Read(&guid, sizeof(GUID), dwRead);
|
||||||
|
return SUCCEEDED(hr) ? dwRead == sizeof(GUID) ? hr : E_FAIL : hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template <class E>
|
template <class E>
|
||||||
inline HRESULT operator <<(ATL::CAtlFile &f, const ATL::CAtlArray<E> &a)
|
inline HRESULT operator <<(ATL::CAtlFile &f, const ATL::CAtlArray<E> &a)
|
||||||
{
|
{
|
||||||
@ -1480,6 +1599,72 @@ inline HRESULT operator >>(ATL::CAtlFile &f, COpSvcControl &op)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline HRESULT operator <<(ATL::CAtlFile &f, const COpWLANProfile &op)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = f << (const COpTypeSingleString&)op; if (FAILED(hr)) return hr;
|
||||||
|
hr = f << op.m_guidInterface; if (FAILED(hr)) return hr;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline HRESULT operator >>(ATL::CAtlFile &f, COpWLANProfile &op)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = f >> (COpTypeSingleString&)op; if (FAILED(hr)) return hr;
|
||||||
|
hr = f >> op.m_guidInterface; if (FAILED(hr)) return hr;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline HRESULT operator <<(ATL::CAtlFile &f, const COpWLANProfileRename &op)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = f << (const COpWLANProfile&)op; if (FAILED(hr)) return hr;
|
||||||
|
hr = f << op.m_sProfileNameDst; if (FAILED(hr)) return hr;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline HRESULT operator >>(ATL::CAtlFile &f, COpWLANProfileRename &op)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = f >> (COpWLANProfile&)op; if (FAILED(hr)) return hr;
|
||||||
|
hr = f >> op.m_sProfileNameDst; if (FAILED(hr)) return hr;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline HRESULT operator <<(ATL::CAtlFile &f, const COpWLANProfileSet &op)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = f << (const COpWLANProfile&)op; if (FAILED(hr)) return hr;
|
||||||
|
hr = f << op.m_sProfileXML; if (FAILED(hr)) return hr;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline HRESULT operator >>(ATL::CAtlFile &f, COpWLANProfileSet &op)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = f >> (COpWLANProfile&)op; if (FAILED(hr)) return hr;
|
||||||
|
hr = f >> op.m_sProfileXML; if (FAILED(hr)) return hr;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline HRESULT operator <<(ATL::CAtlFile &f, const COpList &list)
|
inline HRESULT operator <<(ATL::CAtlFile &f, const COpList &list)
|
||||||
{
|
{
|
||||||
POSITION pos;
|
POSITION pos;
|
||||||
@ -1493,44 +1678,28 @@ inline HRESULT operator <<(ATL::CAtlFile &f, const COpList &list)
|
|||||||
|
|
||||||
for (pos = list.GetHeadPosition(); pos;) {
|
for (pos = list.GetHeadPosition(); pos;) {
|
||||||
const COperation *pOp = list.GetNext(pos);
|
const COperation *pOp = list.GetNext(pos);
|
||||||
if (dynamic_cast<const COpRollbackEnable*>(pOp))
|
if (dynamic_cast<const COpRollbackEnable* >(pOp)) hr = list.Save<COpRollbackEnable, COpList::OP_ROLLBACK_ENABLE >(f, pOp);
|
||||||
hr = list.Save<COpRollbackEnable, COpList::OP_ROLLBACK_ENABLE>(f, pOp);
|
else if (dynamic_cast<const COpFileDelete* >(pOp)) hr = list.Save<COpFileDelete, COpList::OP_FILE_DELETE >(f, pOp);
|
||||||
else if (dynamic_cast<const COpFileDelete*>(pOp))
|
else if (dynamic_cast<const COpFileMove* >(pOp)) hr = list.Save<COpFileMove, COpList::OP_FILE_MOVE >(f, pOp);
|
||||||
hr = list.Save<COpFileDelete, COpList::OP_FILE_DELETE>(f, pOp);
|
else if (dynamic_cast<const COpRegKeyCreate* >(pOp)) hr = list.Save<COpRegKeyCreate, COpList::OP_REG_KEY_CREATE >(f, pOp);
|
||||||
else if (dynamic_cast<const COpFileMove*>(pOp))
|
else if (dynamic_cast<const COpRegKeyCopy* >(pOp)) hr = list.Save<COpRegKeyCopy, COpList::OP_REG_KEY_COPY >(f, pOp);
|
||||||
hr = list.Save<COpFileMove, COpList::OP_FILE_MOVE>(f, pOp);
|
else if (dynamic_cast<const COpRegKeyDelete* >(pOp)) hr = list.Save<COpRegKeyDelete, COpList::OP_REG_KEY_DELETE >(f, pOp);
|
||||||
else if (dynamic_cast<const COpRegKeyCreate*>(pOp))
|
else if (dynamic_cast<const COpRegValueCreate* >(pOp)) hr = list.Save<COpRegValueCreate, COpList::OP_REG_VALUE_CREATE >(f, pOp);
|
||||||
hr = list.Save<COpRegKeyCreate, COpList::OP_REG_KEY_CREATE>(f, pOp);
|
else if (dynamic_cast<const COpRegValueCopy* >(pOp)) hr = list.Save<COpRegValueCopy, COpList::OP_REG_VALUE_COPY >(f, pOp);
|
||||||
else if (dynamic_cast<const COpRegKeyCopy*>(pOp))
|
else if (dynamic_cast<const COpRegValueDelete* >(pOp)) hr = list.Save<COpRegValueDelete, COpList::OP_REG_VALUE_DELETE >(f, pOp);
|
||||||
hr = list.Save<COpRegKeyCopy, COpList::OP_REG_KEY_COPY>(f, pOp);
|
else if (dynamic_cast<const COpTaskCreate* >(pOp)) hr = list.Save<COpTaskCreate, COpList::OP_TASK_CREATE >(f, pOp);
|
||||||
else if (dynamic_cast<const COpRegKeyDelete*>(pOp))
|
else if (dynamic_cast<const COpTaskDelete* >(pOp)) hr = list.Save<COpTaskDelete, COpList::OP_TASK_DELETE >(f, pOp);
|
||||||
hr = list.Save<COpRegKeyDelete, COpList::OP_REG_KEY_DELETE>(f, pOp);
|
else if (dynamic_cast<const COpTaskEnable* >(pOp)) hr = list.Save<COpTaskEnable, COpList::OP_TASK_ENABLE >(f, pOp);
|
||||||
else if (dynamic_cast<const COpRegValueCreate*>(pOp))
|
else if (dynamic_cast<const COpTaskCopy* >(pOp)) hr = list.Save<COpTaskCopy, COpList::OP_TASK_COPY >(f, pOp);
|
||||||
hr = list.Save<COpRegValueCreate, COpList::OP_REG_VALUE_CREATE>(f, pOp);
|
else if (dynamic_cast<const COpCertInstall* >(pOp)) hr = list.Save<COpCertInstall, COpList::OP_CERT_INSTALL >(f, pOp);
|
||||||
else if (dynamic_cast<const COpRegValueCopy*>(pOp))
|
else if (dynamic_cast<const COpCertRemove* >(pOp)) hr = list.Save<COpCertRemove, COpList::OP_CERT_REMOVE >(f, pOp);
|
||||||
hr = list.Save<COpRegValueCopy, COpList::OP_REG_VALUE_COPY>(f, pOp);
|
else if (dynamic_cast<const COpSvcSetStart* >(pOp)) hr = list.Save<COpSvcSetStart, COpList::OP_SVC_SET_START >(f, pOp);
|
||||||
else if (dynamic_cast<const COpRegValueDelete*>(pOp))
|
else if (dynamic_cast<const COpSvcStart* >(pOp)) hr = list.Save<COpSvcStart, COpList::OP_SVC_START >(f, pOp);
|
||||||
hr = list.Save<COpRegValueDelete, COpList::OP_REG_VALUE_DELETE>(f, pOp);
|
else if (dynamic_cast<const COpSvcStop* >(pOp)) hr = list.Save<COpSvcStop, COpList::OP_SVC_STOP >(f, pOp);
|
||||||
else if (dynamic_cast<const COpTaskCreate*>(pOp))
|
else if (dynamic_cast<const COpWLANProfileDelete*>(pOp)) hr = list.Save<COpWLANProfileDelete, COpList::OP_WLAN_PROFILE_DELETE>(f, pOp);
|
||||||
hr = list.Save<COpTaskCreate, COpList::OP_TASK_CREATE>(f, pOp);
|
else if (dynamic_cast<const COpWLANProfileRename*>(pOp)) hr = list.Save<COpWLANProfileRename, COpList::OP_WLAN_PROFILE_RENAME>(f, pOp);
|
||||||
else if (dynamic_cast<const COpTaskDelete*>(pOp))
|
else if (dynamic_cast<const COpWLANProfileSet* >(pOp)) hr = list.Save<COpWLANProfileSet, COpList::OP_WLAN_PROFILE_SET >(f, pOp);
|
||||||
hr = list.Save<COpTaskDelete, COpList::OP_TASK_DELETE>(f, pOp);
|
else if (dynamic_cast<const COpList* >(pOp)) hr = list.Save<COpList, COpList::OP_SUBLIST >(f, pOp);
|
||||||
else if (dynamic_cast<const COpTaskEnable*>(pOp))
|
|
||||||
hr = list.Save<COpTaskEnable, COpList::OP_TASK_ENABLE>(f, pOp);
|
|
||||||
else if (dynamic_cast<const COpTaskCopy*>(pOp))
|
|
||||||
hr = list.Save<COpTaskCopy, COpList::OP_TASK_COPY>(f, pOp);
|
|
||||||
else if (dynamic_cast<const COpCertInstall*>(pOp))
|
|
||||||
hr = list.Save<COpCertInstall, COpList::OP_CERT_INSTALL>(f, pOp);
|
|
||||||
else if (dynamic_cast<const COpCertRemove*>(pOp))
|
|
||||||
hr = list.Save<COpCertRemove, COpList::OP_CERT_REMOVE>(f, pOp);
|
|
||||||
else if (dynamic_cast<const COpSvcSetStart*>(pOp))
|
|
||||||
hr = list.Save<COpSvcSetStart, COpList::OP_SVC_SET_START>(f, pOp);
|
|
||||||
else if (dynamic_cast<const COpSvcStart*>(pOp))
|
|
||||||
hr = list.Save<COpSvcStart, COpList::OP_SVC_START>(f, pOp);
|
|
||||||
else if (dynamic_cast<const COpSvcStop*>(pOp))
|
|
||||||
hr = list.Save<COpSvcStop, COpList::OP_SVC_STOP>(f, pOp);
|
|
||||||
else if (dynamic_cast<const COpList*>(pOp))
|
|
||||||
hr = list.Save<COpList, COpList::OP_SUBLIST>(f, pOp);
|
|
||||||
else {
|
else {
|
||||||
// Unsupported type of operation.
|
// Unsupported type of operation.
|
||||||
hr = E_UNEXPECTED;
|
hr = E_UNEXPECTED;
|
||||||
@ -1561,25 +1730,28 @@ inline HRESULT operator >>(ATL::CAtlFile &f, COpList &list)
|
|||||||
if (FAILED(hr)) return hr;
|
if (FAILED(hr)) return hr;
|
||||||
|
|
||||||
switch ((COpList::OPERATION)iTemp) {
|
switch ((COpList::OPERATION)iTemp) {
|
||||||
case COpList::OP_ROLLBACK_ENABLE: hr = list.LoadAndAddTail<COpRollbackEnable>(f); break;
|
case COpList::OP_ROLLBACK_ENABLE: hr = list.LoadAndAddTail<COpRollbackEnable >(f); break;
|
||||||
case COpList::OP_FILE_DELETE: hr = list.LoadAndAddTail<COpFileDelete >(f); break;
|
case COpList::OP_FILE_DELETE: hr = list.LoadAndAddTail<COpFileDelete >(f); break;
|
||||||
case COpList::OP_FILE_MOVE: hr = list.LoadAndAddTail<COpFileMove >(f); break;
|
case COpList::OP_FILE_MOVE: hr = list.LoadAndAddTail<COpFileMove >(f); break;
|
||||||
case COpList::OP_REG_KEY_CREATE: hr = list.LoadAndAddTail<COpRegKeyCreate >(f); break;
|
case COpList::OP_REG_KEY_CREATE: hr = list.LoadAndAddTail<COpRegKeyCreate >(f); break;
|
||||||
case COpList::OP_REG_KEY_COPY: hr = list.LoadAndAddTail<COpRegKeyCopy >(f); break;
|
case COpList::OP_REG_KEY_COPY: hr = list.LoadAndAddTail<COpRegKeyCopy >(f); break;
|
||||||
case COpList::OP_REG_KEY_DELETE: hr = list.LoadAndAddTail<COpRegKeyDelete >(f); break;
|
case COpList::OP_REG_KEY_DELETE: hr = list.LoadAndAddTail<COpRegKeyDelete >(f); break;
|
||||||
case COpList::OP_REG_VALUE_CREATE: hr = list.LoadAndAddTail<COpRegValueCreate>(f); break;
|
case COpList::OP_REG_VALUE_CREATE: hr = list.LoadAndAddTail<COpRegValueCreate >(f); break;
|
||||||
case COpList::OP_REG_VALUE_COPY: hr = list.LoadAndAddTail<COpRegValueCopy >(f); break;
|
case COpList::OP_REG_VALUE_COPY: hr = list.LoadAndAddTail<COpRegValueCopy >(f); break;
|
||||||
case COpList::OP_REG_VALUE_DELETE: hr = list.LoadAndAddTail<COpRegValueDelete>(f); break;
|
case COpList::OP_REG_VALUE_DELETE: hr = list.LoadAndAddTail<COpRegValueDelete >(f); break;
|
||||||
case COpList::OP_TASK_CREATE: hr = list.LoadAndAddTail<COpTaskCreate >(f); break;
|
case COpList::OP_TASK_CREATE: hr = list.LoadAndAddTail<COpTaskCreate >(f); break;
|
||||||
case COpList::OP_TASK_DELETE: hr = list.LoadAndAddTail<COpTaskDelete >(f); break;
|
case COpList::OP_TASK_DELETE: hr = list.LoadAndAddTail<COpTaskDelete >(f); break;
|
||||||
case COpList::OP_TASK_ENABLE: hr = list.LoadAndAddTail<COpTaskEnable >(f); break;
|
case COpList::OP_TASK_ENABLE: hr = list.LoadAndAddTail<COpTaskEnable >(f); break;
|
||||||
case COpList::OP_TASK_COPY: hr = list.LoadAndAddTail<COpTaskCopy >(f); break;
|
case COpList::OP_TASK_COPY: hr = list.LoadAndAddTail<COpTaskCopy >(f); break;
|
||||||
case COpList::OP_CERT_INSTALL: hr = list.LoadAndAddTail<COpCertInstall >(f); break;
|
case COpList::OP_CERT_INSTALL: hr = list.LoadAndAddTail<COpCertInstall >(f); break;
|
||||||
case COpList::OP_CERT_REMOVE: hr = list.LoadAndAddTail<COpCertRemove >(f); break;
|
case COpList::OP_CERT_REMOVE: hr = list.LoadAndAddTail<COpCertRemove >(f); break;
|
||||||
case COpList::OP_SVC_SET_START: hr = list.LoadAndAddTail<COpSvcSetStart >(f); break;
|
case COpList::OP_SVC_SET_START: hr = list.LoadAndAddTail<COpSvcSetStart >(f); break;
|
||||||
case COpList::OP_SVC_START: hr = list.LoadAndAddTail<COpSvcStart >(f); break;
|
case COpList::OP_SVC_START: hr = list.LoadAndAddTail<COpSvcStart >(f); break;
|
||||||
case COpList::OP_SVC_STOP: hr = list.LoadAndAddTail<COpSvcStop >(f); break;
|
case COpList::OP_SVC_STOP: hr = list.LoadAndAddTail<COpSvcStop >(f); break;
|
||||||
case COpList::OP_SUBLIST: hr = list.LoadAndAddTail<COpList >(f); break;
|
case COpList::OP_WLAN_PROFILE_DELETE: hr = list.LoadAndAddTail<COpWLANProfileDelete>(f); break;
|
||||||
|
case COpList::OP_WLAN_PROFILE_RENAME: hr = list.LoadAndAddTail<COpWLANProfileRename>(f); break;
|
||||||
|
case COpList::OP_WLAN_PROFILE_SET: hr = list.LoadAndAddTail<COpWLANProfileSet >(f); break;
|
||||||
|
case COpList::OP_SUBLIST: hr = list.LoadAndAddTail<COpList >(f); break;
|
||||||
default:
|
default:
|
||||||
// Unsupported type of operation.
|
// Unsupported type of operation.
|
||||||
hr = E_UNEXPECTED;
|
hr = E_UNEXPECTED;
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
<ClCompile Include="OpSvc.cpp" />
|
<ClCompile Include="OpSvc.cpp" />
|
||||||
<ClCompile Include="OpTS.cpp" />
|
<ClCompile Include="OpTS.cpp" />
|
||||||
<ClCompile Include="OpReg.cpp" />
|
<ClCompile Include="OpReg.cpp" />
|
||||||
|
<ClCompile Include="OpWLAN.cpp" />
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
@ -36,6 +36,9 @@
|
|||||||
<ClCompile Include="OpSvc.cpp">
|
<ClCompile Include="OpSvc.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="OpWLAN.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="MSICALib.h">
|
<ClInclude Include="MSICALib.h">
|
||||||
|
@ -83,9 +83,9 @@ HRESULT COpCertInstall::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_CERT_INSTALL_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_CERT_INSTALL);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(dwError);
|
return AtlHresultFromWin32(dwError);
|
||||||
}
|
}
|
||||||
@ -150,9 +150,9 @@ HRESULT COpCertRemove::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_CERT_REMOVE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_CERT_REMOVE);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(dwError);
|
return AtlHresultFromWin32(dwError);
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,9 @@ HRESULT COpFileDelete::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_FILE_DELETE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_FILE_DELETE);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(dwError);
|
return AtlHresultFromWin32(dwError);
|
||||||
}
|
}
|
||||||
@ -76,10 +76,10 @@ HRESULT COpFileMove::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
} else {
|
} else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_FILE_MOVE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_FILE_MOVE);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue1 );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue1 );
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue2 );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue2 );
|
||||||
::MsiRecordSetInteger(hRecordProg, 4, dwError );
|
::MsiRecordSetInteger(hRecordProg, 4, dwError );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(dwError);
|
return AtlHresultFromWin32(dwError);
|
||||||
}
|
}
|
||||||
|
@ -86,10 +86,10 @@ HRESULT COpRegKeyCreate::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_CREATE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_CREATE );
|
||||||
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff);
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 4, lResult );
|
::MsiRecordSetInteger(hRecordProg, 4, lResult );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(lResult);
|
return AtlHresultFromWin32(lResult);
|
||||||
}
|
}
|
||||||
@ -137,11 +137,11 @@ HRESULT COpRegKeyCopy::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_COPY_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_COPY );
|
||||||
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff);
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue1 );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue1 );
|
||||||
::MsiRecordSetStringW(hRecordProg, 4, m_sValue2 );
|
::MsiRecordSetStringW(hRecordProg, 4, m_sValue2 );
|
||||||
::MsiRecordSetInteger(hRecordProg, 5, lResult );
|
::MsiRecordSetInteger(hRecordProg, 5, lResult );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(lResult);
|
return AtlHresultFromWin32(lResult);
|
||||||
}
|
}
|
||||||
@ -336,10 +336,10 @@ HRESULT COpRegKeyDelete::Execute(CSession *pSession)
|
|||||||
pSession->m_olCommit.AddTail(new COpRegKeyDelete(m_hKeyRoot, sBackupName));
|
pSession->m_olCommit.AddTail(new COpRegKeyDelete(m_hKeyRoot, sBackupName));
|
||||||
} else {
|
} else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_PROBING_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_PROBING );
|
||||||
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff);
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, sBackupName );
|
::MsiRecordSetStringW(hRecordProg, 3, sBackupName );
|
||||||
::MsiRecordSetInteger(hRecordProg, 4, lResult );
|
::MsiRecordSetInteger(hRecordProg, 4, lResult );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(lResult);
|
return AtlHresultFromWin32(lResult);
|
||||||
}
|
}
|
||||||
@ -353,10 +353,10 @@ HRESULT COpRegKeyDelete::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_DELETE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_DELETE );
|
||||||
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff);
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 4, lResult );
|
::MsiRecordSetInteger(hRecordProg, 4, lResult );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(lResult);
|
return AtlHresultFromWin32(lResult);
|
||||||
}
|
}
|
||||||
@ -549,11 +549,11 @@ HRESULT COpRegValueCreate::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_SETVALUE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_SETVALUE);
|
||||||
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff);
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
::MsiRecordSetStringW(hRecordProg, 4, m_sValueName );
|
::MsiRecordSetStringW(hRecordProg, 4, m_sValueName );
|
||||||
::MsiRecordSetInteger(hRecordProg, 5, lResult );
|
::MsiRecordSetInteger(hRecordProg, 5, lResult );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(lResult);
|
return AtlHresultFromWin32(lResult);
|
||||||
}
|
}
|
||||||
@ -621,12 +621,12 @@ HRESULT COpRegValueCopy::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(6);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(6);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_COPYVALUE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_COPYVALUE);
|
||||||
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
::MsiRecordSetStringW(hRecordProg, 4, m_sValueName1 );
|
::MsiRecordSetStringW(hRecordProg, 4, m_sValueName1 );
|
||||||
::MsiRecordSetStringW(hRecordProg, 5, m_sValueName2 );
|
::MsiRecordSetStringW(hRecordProg, 5, m_sValueName2 );
|
||||||
::MsiRecordSetInteger(hRecordProg, 6, lResult );
|
::MsiRecordSetInteger(hRecordProg, 6, lResult );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(lResult);
|
return AtlHresultFromWin32(lResult);
|
||||||
}
|
}
|
||||||
@ -689,11 +689,11 @@ HRESULT COpRegValueDelete::Execute(CSession *pSession)
|
|||||||
pSession->m_olCommit.AddTail(new COpRegValueDelete(m_hKeyRoot, m_sValue, sBackupName));
|
pSession->m_olCommit.AddTail(new COpRegValueDelete(m_hKeyRoot, m_sValue, sBackupName));
|
||||||
} else {
|
} else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_PROBINGVAL_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_PROBINGVAL);
|
||||||
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, sBackupName );
|
::MsiRecordSetStringW(hRecordProg, 3, sBackupName );
|
||||||
::MsiRecordSetInteger(hRecordProg, 4, lResult );
|
::MsiRecordSetInteger(hRecordProg, 4, lResult );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
::RegCloseKey(hKey);
|
::RegCloseKey(hKey);
|
||||||
return AtlHresultFromWin32(lResult);
|
return AtlHresultFromWin32(lResult);
|
||||||
@ -711,11 +711,11 @@ HRESULT COpRegValueDelete::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_DELETEVALUE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_REGKEY_DELETEVALUE);
|
||||||
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
::MsiRecordSetInteger(hRecordProg, 2, (UINT)m_hKeyRoot & 0x7fffffff );
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
::MsiRecordSetStringW(hRecordProg, 4, m_sValueName );
|
::MsiRecordSetStringW(hRecordProg, 4, m_sValueName );
|
||||||
::MsiRecordSetInteger(hRecordProg, 5, lResult );
|
::MsiRecordSetInteger(hRecordProg, 5, lResult );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(lResult);
|
return AtlHresultFromWin32(lResult);
|
||||||
}
|
}
|
||||||
|
@ -67,9 +67,9 @@ HRESULT COpSvcSetStart::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_SVC_SET_START_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_SVC_SET_START);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(dwError);
|
return AtlHresultFromWin32(dwError);
|
||||||
}
|
}
|
||||||
@ -170,9 +170,9 @@ HRESULT COpSvcStart::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_SVC_START_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_SVC_START);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(dwError);
|
return AtlHresultFromWin32(dwError);
|
||||||
}
|
}
|
||||||
@ -225,9 +225,9 @@ HRESULT COpSvcStop::Execute(CSession *pSession)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
else {
|
else {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_SVC_STOP_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_SVC_STOP);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
return AtlHresultFromWin32(dwError);
|
return AtlHresultFromWin32(dwError);
|
||||||
}
|
}
|
||||||
|
@ -431,9 +431,9 @@ HRESULT COpTaskCreate::Execute(CSession *pSession)
|
|||||||
finish:
|
finish:
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_TASK_CREATE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_TASK_CREATE);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, hr );
|
::MsiRecordSetInteger(hRecordProg, 3, hr );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
}
|
}
|
||||||
return hr;
|
return hr;
|
||||||
@ -801,9 +801,9 @@ HRESULT COpTaskDelete::Execute(CSession *pSession)
|
|||||||
finish:
|
finish:
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_TASK_DELETE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_TASK_DELETE);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, hr );
|
::MsiRecordSetInteger(hRecordProg, 3, hr );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
}
|
}
|
||||||
return hr;
|
return hr;
|
||||||
@ -921,9 +921,9 @@ HRESULT COpTaskEnable::Execute(CSession *pSession)
|
|||||||
finish:
|
finish:
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_TASK_ENABLE_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_TASK_ENABLE);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||||
::MsiRecordSetInteger(hRecordProg, 3, hr );
|
::MsiRecordSetInteger(hRecordProg, 3, hr );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
}
|
}
|
||||||
return hr;
|
return hr;
|
||||||
@ -1026,10 +1026,10 @@ HRESULT COpTaskCopy::Execute(CSession *pSession)
|
|||||||
finish:
|
finish:
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
||||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_TASK_COPY_FAILED);
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_TASK_COPY);
|
||||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue1 );
|
::MsiRecordSetStringW(hRecordProg, 2, m_sValue1 );
|
||||||
::MsiRecordSetStringW(hRecordProg, 3, m_sValue2 );
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue2 );
|
||||||
::MsiRecordSetInteger(hRecordProg, 4, hr );
|
::MsiRecordSetInteger(hRecordProg, 4, hr );
|
||||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
}
|
}
|
||||||
return hr;
|
return hr;
|
||||||
|
182
MSICALib/OpWLAN.cpp
Normal file
182
MSICALib/OpWLAN.cpp
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
#pragma comment(lib, "wlanapi.lib")
|
||||||
|
|
||||||
|
|
||||||
|
namespace MSICA {
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// COpWLANProfile
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
COpWLANProfile::COpWLANProfile(const GUID &guidInterface, LPCWSTR pszProfileName, int iTicks) :
|
||||||
|
COpTypeSingleString(pszProfileName, iTicks),
|
||||||
|
m_guidInterface(guidInterface)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// COpWLANProfileDelete
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
COpWLANProfileDelete::COpWLANProfileDelete(const GUID &guidInterface, LPCWSTR pszProfileName, int iTicks) : COpWLANProfile(guidInterface, pszProfileName, iTicks)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT COpWLANProfileDelete::Execute(CSession *pSession)
|
||||||
|
{
|
||||||
|
DWORD dwError, dwNegotiatedVersion;
|
||||||
|
HANDLE hClientHandle;
|
||||||
|
|
||||||
|
dwError = ::WlanOpenHandle(2, NULL, &dwNegotiatedVersion, &hClientHandle);
|
||||||
|
if (dwError == NO_ERROR) {
|
||||||
|
if (pSession->m_bRollbackEnabled) {
|
||||||
|
ATL::CAtlStringW sBackupName;
|
||||||
|
UINT uiCount = 0;
|
||||||
|
|
||||||
|
do {
|
||||||
|
// Rename the profile to make a backup.
|
||||||
|
sBackupName.Format(L"%ls (orig %u)", (LPCWSTR)m_sValue, ++uiCount);
|
||||||
|
dwError = ::WlanRenameProfile(hClientHandle, &m_guidInterface, m_sValue, sBackupName, NULL);
|
||||||
|
} while (dwError == ERROR_ALREADY_EXISTS);
|
||||||
|
if (dwError == NO_ERROR) {
|
||||||
|
// Order rollback action to restore from backup copy.
|
||||||
|
pSession->m_olRollback.AddHead(new COpWLANProfileRename(m_guidInterface, sBackupName, m_sValue));
|
||||||
|
|
||||||
|
// Order commit action to delete backup copy.
|
||||||
|
pSession->m_olCommit.AddTail(new COpWLANProfileDelete(m_guidInterface, sBackupName));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Delete the profile.
|
||||||
|
dwError = ::WlanDeleteProfile(hClientHandle, &m_guidInterface, m_sValue, NULL);
|
||||||
|
}
|
||||||
|
::WlanCloseHandle(hClientHandle, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwError == NO_ERROR || dwError == ERROR_NOT_FOUND)
|
||||||
|
return S_OK;
|
||||||
|
else {
|
||||||
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
|
||||||
|
ATL::CAtlStringW sGUID;
|
||||||
|
GuidToString(m_guidInterface, sGUID);
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_WLAN_PROFILE_DELETE);
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 2, sGUID );
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 4, dwError );
|
||||||
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
return AtlHresultFromWin32(dwError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// COpWLANProfileRename
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
COpWLANProfileRename::COpWLANProfileRename(const GUID &guidInterface, LPCWSTR pszProfileNameSrc, LPCWSTR pszProfileNameDst, int iTicks) :
|
||||||
|
COpWLANProfile(guidInterface, pszProfileNameSrc, iTicks),
|
||||||
|
m_sProfileNameDst(pszProfileNameDst)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT COpWLANProfileRename::Execute(CSession *pSession)
|
||||||
|
{
|
||||||
|
DWORD dwError, dwNegotiatedVersion;
|
||||||
|
HANDLE hClientHandle;
|
||||||
|
|
||||||
|
dwError = ::WlanOpenHandle(2, NULL, &dwNegotiatedVersion, &hClientHandle);
|
||||||
|
if (dwError == NO_ERROR) {
|
||||||
|
// Rename the profile.
|
||||||
|
dwError = ::WlanRenameProfile(hClientHandle, &m_guidInterface, m_sValue, m_sProfileNameDst, NULL);
|
||||||
|
if (dwError == NO_ERROR && pSession->m_bRollbackEnabled) {
|
||||||
|
// Order rollback action to rename it back.
|
||||||
|
pSession->m_olRollback.AddHead(new COpWLANProfileRename(m_guidInterface, m_sProfileNameDst, m_sValue));
|
||||||
|
}
|
||||||
|
::WlanCloseHandle(hClientHandle, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwError == NO_ERROR)
|
||||||
|
return S_OK;
|
||||||
|
else {
|
||||||
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
||||||
|
ATL::CAtlStringW sGUID;
|
||||||
|
GuidToString(m_guidInterface, sGUID);
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_WLAN_PROFILE_RENAME);
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 2, sGUID );
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 4, m_sProfileNameDst );
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 5, dwError );
|
||||||
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
return AtlHresultFromWin32(dwError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// COpWLANProfileSet
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
COpWLANProfileSet::COpWLANProfileSet(const GUID &guidInterface, LPCWSTR pszProfileName, LPCWSTR pszProfileXML, int iTicks) :
|
||||||
|
COpWLANProfile(guidInterface, pszProfileName, iTicks),
|
||||||
|
m_sProfileXML(pszProfileXML)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT COpWLANProfileSet::Execute(CSession *pSession)
|
||||||
|
{
|
||||||
|
DWORD dwError, dwNegotiatedVersion;
|
||||||
|
HANDLE hClientHandle;
|
||||||
|
WLAN_REASON_CODE wlrc = 0;
|
||||||
|
|
||||||
|
{
|
||||||
|
// Delete existing profile first.
|
||||||
|
// Since deleting a profile is a complicated job (when rollback/commit support is required), and we do have an operation just for that, we use it.
|
||||||
|
// Don't worry, COpWLANProfileDelete::Execute() returns S_OK if profile doesn't exist.
|
||||||
|
COpWLANProfileDelete opDelete(m_guidInterface, m_sValue);
|
||||||
|
HRESULT hr = opDelete.Execute(pSession);
|
||||||
|
if (FAILED(hr)) return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
dwError = ::WlanOpenHandle(2, NULL, &dwNegotiatedVersion, &hClientHandle);
|
||||||
|
if (dwError == NO_ERROR) {
|
||||||
|
// Set the profile.
|
||||||
|
dwError = ::WlanSetProfile(hClientHandle, &m_guidInterface, 0, m_sProfileXML, NULL, TRUE, NULL, &wlrc);
|
||||||
|
if (dwError == NO_ERROR && pSession->m_bRollbackEnabled) {
|
||||||
|
// Order rollback action to delete it.
|
||||||
|
pSession->m_olRollback.AddHead(new COpWLANProfileDelete(m_guidInterface, m_sValue));
|
||||||
|
}
|
||||||
|
::WlanCloseHandle(hClientHandle, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwError == NO_ERROR)
|
||||||
|
return S_OK;
|
||||||
|
else {
|
||||||
|
PMSIHANDLE hRecordProg = ::MsiCreateRecord(5);
|
||||||
|
ATL::CAtlStringW sGUID, sReason;
|
||||||
|
DWORD dwSize = 1024;
|
||||||
|
LPWSTR szBuffer = sReason.GetBuffer(dwSize);
|
||||||
|
|
||||||
|
GuidToString(m_guidInterface, sGUID);
|
||||||
|
if (::WlanReasonCodeToString(wlrc, dwSize, szBuffer, NULL) == NO_ERROR) {
|
||||||
|
sReason.ReleaseBuffer(dwSize);
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 4, sReason);
|
||||||
|
} else {
|
||||||
|
sReason.ReleaseBuffer(dwSize);
|
||||||
|
sReason.Format(L"0x%x", wlrc);
|
||||||
|
}
|
||||||
|
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_WLAN_PROFILE_SET);
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 2, sGUID );
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 3, m_sValue );
|
||||||
|
::MsiRecordSetStringW(hRecordProg, 4, sReason );
|
||||||
|
::MsiRecordSetInteger(hRecordProg, 5, dwError );
|
||||||
|
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||||
|
return AtlHresultFromWin32(dwError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace MSICA
|
@ -31,5 +31,6 @@
|
|||||||
#include <msiquery.h>
|
#include <msiquery.h>
|
||||||
#include <mstask.h>
|
#include <mstask.h>
|
||||||
#include <taskschd.h>
|
#include <taskschd.h>
|
||||||
|
#include <wlanapi.h>
|
||||||
|
|
||||||
#include "MSICALib.h"
|
#include "MSICALib.h"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
#define MSICA_VERSION 0x00ff0100
|
#define MSICA_VERSION 0x00ff0200
|
||||||
|
|
||||||
#define MSICA_VERSION_MAJ 0
|
#define MSICA_VERSION_MAJ 0
|
||||||
#define MSICA_VERSION_MIN 255
|
#define MSICA_VERSION_MIN 255
|
||||||
#define MSICA_VERSION_REV 1
|
#define MSICA_VERSION_REV 2
|
||||||
#define MSICA_VERSION_BUILD 0
|
#define MSICA_VERSION_BUILD 0
|
||||||
|
|
||||||
#define MSICA_VERSION_STR "1.0-pre1"
|
#define MSICA_VERSION_STR "1.0-pre2"
|
||||||
#define MSICA_BUILD_YEAR_STR "2014"
|
#define MSICA_BUILD_YEAR_STR "2014"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user