summaryrefslogtreecommitdiff
path: root/src/burn/engine/embedded.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/embedded.cpp')
-rw-r--r--src/burn/engine/embedded.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/burn/engine/embedded.cpp b/src/burn/engine/embedded.cpp
index 4c3de98e..ac4c76d0 100644
--- a/src/burn/engine/embedded.cpp
+++ b/src/burn/engine/embedded.cpp
@@ -40,6 +40,7 @@ static HRESULT OnEmbeddedProgress(
40 40
41*******************************************************************/ 41*******************************************************************/
42extern "C" HRESULT EmbeddedRunBundle( 42extern "C" HRESULT EmbeddedRunBundle(
43 __in BURN_PIPE_CONNECTION* pConnection,
43 __in_z LPCWSTR wzExecutablePath, 44 __in_z LPCWSTR wzExecutablePath,
44 __in_z LPWSTR sczBaseCommand, 45 __in_z LPWSTR sczBaseCommand,
45 __in_z_opt LPCWSTR wzUserArgs, 46 __in_z_opt LPCWSTR wzUserArgs,
@@ -55,20 +56,19 @@ extern "C" HRESULT EmbeddedRunBundle(
55 PROCESS_INFORMATION pi = { }; 56 PROCESS_INFORMATION pi = { };
56 BURN_PIPE_RESULT result = { }; 57 BURN_PIPE_RESULT result = { };
57 58
58 BURN_PIPE_CONNECTION connection = { }; 59 PipeConnectionInitialize(pConnection);
59 PipeConnectionInitialize(&connection);
60 60
61 BURN_EMBEDDED_CALLBACK_CONTEXT context = { }; 61 BURN_EMBEDDED_CALLBACK_CONTEXT context = { };
62 context.pfnGenericMessageHandler = pfnGenericMessageHandler; 62 context.pfnGenericMessageHandler = pfnGenericMessageHandler;
63 context.pvContext = pvContext; 63 context.pvContext = pvContext;
64 64
65 hr = PipeCreateNameAndSecret(&connection.sczName, &connection.sczSecret); 65 hr = PipeCreateNameAndSecret(&pConnection->sczName, &pConnection->sczSecret);
66 ExitOnFailure(hr, "Failed to create embedded pipe name and client token."); 66 ExitOnFailure(hr, "Failed to create embedded pipe name and client token.");
67 67
68 hr = PipeCreatePipes(&connection, FALSE, &hCreatedPipesEvent); 68 hr = PipeCreatePipes(pConnection, FALSE, &hCreatedPipesEvent);
69 ExitOnFailure(hr, "Failed to create embedded pipe."); 69 ExitOnFailure(hr, "Failed to create embedded pipe.");
70 70
71 hr = StrAllocFormatted(&sczCommand, L"%ls -%ls %ls %ls %u", sczBaseCommand, BURN_COMMANDLINE_SWITCH_EMBEDDED, connection.sczName, connection.sczSecret, dwCurrentProcessId); 71 hr = StrAllocFormatted(&sczCommand, L"%ls -%ls %ls %ls %u", sczBaseCommand, BURN_COMMANDLINE_SWITCH_EMBEDDED, pConnection->sczName, pConnection->sczSecret, dwCurrentProcessId);
72 ExitOnFailure(hr, "Failed to append embedded args."); 72 ExitOnFailure(hr, "Failed to append embedded args.");
73 73
74 // Always add user supplied arguments last. 74 // Always add user supplied arguments last.
@@ -81,18 +81,18 @@ extern "C" HRESULT EmbeddedRunBundle(
81 hr = CoreCreateProcess(wzExecutablePath, sczCommand, TRUE, CREATE_NO_WINDOW, NULL, 0, &pi); 81 hr = CoreCreateProcess(wzExecutablePath, sczCommand, TRUE, CREATE_NO_WINDOW, NULL, 0, &pi);
82 ExitOnFailure(hr, "Failed to create embedded process at path: %ls", wzExecutablePath); 82 ExitOnFailure(hr, "Failed to create embedded process at path: %ls", wzExecutablePath);
83 83
84 connection.dwProcessId = ::GetProcessId(pi.hProcess); 84 pConnection->dwProcessId = ::GetProcessId(pi.hProcess);
85 connection.hProcess = pi.hProcess; 85 pConnection->hProcess = pi.hProcess;
86 pi.hProcess = NULL; 86 pi.hProcess = NULL;
87 87
88 hr = PipeWaitForChildConnect(&connection); 88 hr = PipeWaitForChildConnect(pConnection);
89 ExitOnFailure(hr, "Failed to wait for embedded process to connect to pipe."); 89 ExitOnFailure(hr, "Failed to wait for embedded process to connect to pipe.");
90 90
91 hr = PipePumpMessages(connection.hPipe, ProcessEmbeddedMessages, &context, &result); 91 hr = PipePumpMessages(pConnection->hPipe, ProcessEmbeddedMessages, &context, &result);
92 ExitOnFailure(hr, "Failed to process messages from embedded message."); 92 ExitOnFailure(hr, "Failed to process messages from embedded message.");
93 93
94 // Get the return code from the embedded process. 94 // Get the return code from the embedded process.
95 hr = CoreWaitForProcCompletion(connection.hProcess, INFINITE, pdwExitCode); 95 hr = CoreWaitForProcCompletion(pConnection->hProcess, INFINITE, pdwExitCode);
96 ExitOnFailure(hr, "Failed to wait for embedded executable: %ls", wzExecutablePath); 96 ExitOnFailure(hr, "Failed to wait for embedded executable: %ls", wzExecutablePath);
97 97
98LExit: 98LExit:
@@ -101,7 +101,7 @@ LExit:
101 101
102 StrSecureZeroFreeString(sczCommand); 102 StrSecureZeroFreeString(sczCommand);
103 ReleaseHandle(hCreatedPipesEvent); 103 ReleaseHandle(hCreatedPipesEvent);
104 PipeConnectionUninitialize(&connection); 104 PipeConnectionUninitialize(pConnection);
105 105
106 return hr; 106 return hr;
107} 107}
@@ -133,8 +133,8 @@ static HRESULT ProcessEmbeddedMessages(
133 break; 133 break;
134 134
135 default: 135 default:
136 hr = E_INVALIDARG; 136 LogStringLine(REPORT_DEBUG, "Unexpected embedded message received from child process, msg: %u", pMsg->dwMessage);
137 ExitOnRootFailure(hr, "Unexpected embedded message sent to child process, msg: %u", pMsg->dwMessage); 137 dwResult = (DWORD)E_NOTIMPL;
138 } 138 }
139 139
140 *pdwResult = dwResult; 140 *pdwResult = dwResult;