-
Notifications
You must be signed in to change notification settings - Fork 57
ExtendedProcessFailedEventArgs.md #3824
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,85 @@ | ||||||
|
||||||
Title | ||||||
=== | ||||||
|
||||||
# Background | ||||||
Code integrity is a feature of Windows that verifies the authenticity and integrity of the code that runs on the system. It helps protect it from malware, tampering, and unauthorized changes. Code integrity checks the digital signatures of the files that are loaded into memory, and prevents any file that does not have a valid signature from running in WebView2. We are extending ProcessFailedEventArgs with BlockedFile property which caused webview2 process to exit with code STATUS_INVALID_IMAGE_HASH. | ||||||
david-risney marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
# Examples | ||||||
|
||||||
```c# | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove the leading spaces here to let the backticks get interpreted correctly so this shows as a formatted code block. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please fix. |
||||||
/// This is an event handler for our CoreWebView2's ProcessFailedEvent | ||||||
private void CoreWebView2_ProcessFailed(object sender, CoreWebView2ProcessFailedEventArgs e) | ||||||
{ | ||||||
if (e.ExitCode == -1073740760 /*STATUS_INVALID_IMAGE_HASH*/) | ||||||
{ | ||||||
SendTelemetry(e.BlockedFile); | ||||||
david-risney marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
} | ||||||
} | ||||||
``` | ||||||
|
||||||
```cpp | ||||||
CHECK_FAILURE(m_webView->add_ProcessFailed( | ||||||
Callback<ICoreWebView2ProcessFailedEventHandler>( | ||||||
[this](ICoreWebView2* sender, ICoreWebView2ProcessFailedEventArgs* argsRaw) | ||||||
-> HRESULT { | ||||||
wil::com_ptr<ICoreWebView2ProcessFailedEventArgs> args = argsRaw; | ||||||
int exit_code; | ||||||
CHECK_FAILURE(args->get_ExitCode(&exit_code)); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. get_ExitCode is a method on ICoreWebView2ProcessFailedEventArgs2, so would have to QI to it first. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please fix. |
||||||
|
||||||
if (exit_code == -1073740760 /*STATUS_INVALID_IMAGE_HASH*/) { | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. FailureSourceModulePath doesn't appear to be specific to STATUS_INVALID_IMAGE_HASH or Windows Code Integrity. Is the expectation that this string could be populated in other failure cases, but STATUS_INVALID_IMAGE_HASH is the only case when we're currently promising it will always be populated? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes that is exactly what I was thinking. |
||||||
wil::unique_cotaskmem_string blockedFile; | ||||||
CHECK_FAILURE(arg_blocked_file->get_BlockedFile(&blockedFile)); | ||||||
|
||||||
SendTelemetry(blockedFile); | ||||||
} | ||||||
|
||||||
return S_OK; | ||||||
} | ||||||
``` | ||||||
|
||||||
|
||||||
# API Details | ||||||
|
||||||
``` | ||||||
/// A continuation of the ICoreWebView2ProcessFailedEventArgs2 interface | ||||||
/// fot getting blocked file for code integrity process failures. | ||||||
david-risney marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
[uuid(a9fc1af8-f934-4f0f-a788-7be0808c329b), object, pointer_default(unique)] | ||||||
interface ICoreWebView2ProcessFailedEventArgs : IUnknown { | ||||||
vbryh-msft marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Um, we already have a ICoreWebView2ProcessFailedEventArgs. and even a ICoreWebView2ProcessFailedEventArgs2. Shouldn't this be ICoreWebView2ProcessFailedEventArgs3? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please fix. Yes, should be ICoreWebView2ProcessFailedEventArgs3 and it should be derived from ICoreWebView2ProcessFailedEventArgs2 |
||||||
/// Code Integrity is a feature that verifies the integrity and | ||||||
david-risney marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
/// authenticity of dynamic-link libraries (DLLs) | ||||||
/// on Windows systems. It ensures that only trusted | ||||||
/// code can run on the system and prevents unauthorized or | ||||||
/// malicious modifications. | ||||||
/// When ProcessFailed occurred due to a failed Code Integrity check, | ||||||
/// this property returns the name of the blocked file that was prevented from | ||||||
david-risney marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
/// loading on the system. | ||||||
/// The webview2 process which tried to load blocked DLL will fail with | ||||||
/// exit code STATUS_INVALID_IMAGE_HASH(-1073740760). | ||||||
/// A file can be blocked for various | ||||||
/// reasons, such as: | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. May be out of scope, but will the developer ever need to know the more specific reason? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't believe this is required and we can look into adding it if necessary in the future. @vbryh-msft or @aluhrs13 can comment otherwise. |
||||||
/// - It has an invalid or missing signature that does | ||||||
/// not match the publisher or signer of the file. | ||||||
/// - It has been tampered with or corrupted by malware or other software. | ||||||
/// - It has been blocklisted by an administrator or a security policy. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please fix. |
||||||
/// This property always will be empty if failure is not caused by | ||||||
david-risney marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
/// STATUS_INVALID_IMAGE_HASH. | ||||||
[propget] HRESULT BlockedFile([out, retval] LPWSTR* blockedFile); | ||||||
david-risney marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
} | ||||||
``` | ||||||
|
||||||
```c# (but really MIDL3) | ||||||
namespace Microsoft.Web.WebView2.Core | ||||||
{ | ||||||
runtimeclass CoreWebView2ProcessFailedEventArgs | ||||||
{ | ||||||
// ICoreWebView2ProcessFailedEventArgs members continuation | ||||||
[interface_name("Microsoft.Web.WebView2.Core.ICoreWebView2ProcessFailedEventArgs3")] | ||||||
{ | ||||||
// ICoreWebView2ProcessFailedEventArgs3 members | ||||||
String BlockedFile { get; }; | ||||||
} | ||||||
|
||||||
} | ||||||
} | ||||||
``` |
Uh oh!
There was an error while loading. Please reload this page.