#include "Http.hpp"
#include <Windows.h>
#include <string>
#include <DbgHelp.h>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <urlmon.h>
#pragma comment(lib, "urlmon.lib")

//http://www.sym101.com/Symbols/QueryModuleStruct?ModuleName=ntkrnlmp.pdb&Guid=F55005B80C686C739E763E6CF2559D9F&Agent=1&StructName=_EPROCESS&FildName=ActiveProcessLinks
#include "_helper.h"
using namespace std;
/*预定义缓存的文件列表*/
auto syspath =
{
"C:\\Windows\\System32\\hidclass.sys",
"C:\\Windows\\System32\\hidparse.sys",
"C:\\Windows\\System32\\hidusb.sys",
"C:\\Windows\\System32\\win32k.sys",
"C:\\Windows\\System32\\win32kbase.sys",
"C:\\Windows\\System32\\win32kfull.sys",
"C:\\Windows\\System32\\win32kns.sys",
"C:\\Windows\\System32\\drivers\\1394ohci.sys",
"C:\\Windows\\System32\\drivers\\3ware.sys",
"C:\\Windows\\System32\\drivers\\acpi.sys",
"C:\\Windows\\System32\\drivers\\AcpiDev.sys",
"C:\\Windows\\System32\\drivers\\acpiex.sys",
"C:\\Windows\\System32\\drivers\\acpipagr.sys",
"C:\\Windows\\System32\\drivers\\acpipmi.sys",
"C:\\Windows\\System32\\drivers\\acpitime.sys",
"C:\\Windows\\System32\\drivers\\Acx01000.sys",
"C:\\Windows\\System32\\drivers\\adp80xx.sys",
"C:\\Windows\\System32\\drivers\\afd.sys",
"C:\\Windows\\System32\\drivers\\afunix.sys",
"C:\\Windows\\System32\\drivers\\agilevpn.sys",
"C:\\Windows\\System32\\drivers\\ahcache.sys",
"C:\\Windows\\System32\\drivers\\amdgpio2.sys",
"C:\\Windows\\System32\\drivers\\amdi2c.sys",
"C:\\Windows\\System32\\drivers\\amdk8.sys",
"C:\\Windows\\System32\\drivers\\amdppm.sys",
"C:\\Windows\\System32\\drivers\\amdsata.sys",
"C:\\Windows\\System32\\drivers\\amdsbs.sys",
"C:\\Windows\\System32\\drivers\\amdxata.sys",
"C:\\Windows\\System32\\drivers\\appid.sys",
"C:\\Windows\\System32\\drivers\\AppleSSD.sys",
"C:\\Windows\\System32\\drivers\\applockerfltr.sys",
"C:\\Windows\\System32\\drivers\\arcsas.sys",
"C:\\Windows\\System32\\drivers\\asyncmac.sys",
"C:\\Windows\\System32\\drivers\\atapi.sys",
"C:\\Windows\\System32\\drivers\\ataport.sys",
"C:\\Windows\\System32\\drivers\\bam.sys",
"C:\\Windows\\System32\\drivers\\battc.sys",
"C:\\Windows\\System32\\drivers\\bcmfn2.sys",
"C:\\Windows\\System32\\drivers\\beep.sys",
"C:\\Windows\\System32\\drivers\\bindflt.sys",
"C:\\Windows\\System32\\drivers\\bowser.sys",
"C:\\Windows\\System32\\drivers\\bridge.sys",
"C:\\Windows\\System32\\drivers\\BtaMPM.sys",
"C:\\Windows\\System32\\drivers\\BthA2dp.sys",
"C:\\Windows\\System32\\drivers\\bthenum.sys",
"C:\\Windows\\System32\\drivers\\BthHfAud.sys",
"C:\\Windows\\System32\\drivers\\BthHfEnum.sys",
"C:\\Windows\\System32\\drivers\\BthMini.SYS",
"C:\\Windows\\System32\\drivers\\bthmodem.sys",
"C:\\Windows\\System32\\drivers\\bthpan.sys",
"C:\\Windows\\System32\\drivers\\bthport.sys",
"C:\\Windows\\System32\\drivers\\BTHUSB.SYS",
"C:\\Windows\\System32\\drivers\\bttflt.sys",
"C:\\Windows\\System32\\drivers\\buttonconverter.sys",
"C:\\Windows\\System32\\drivers\\bxvbda.sys",
"C:\\Windows\\System32\\drivers\\CAD.sys",
"C:\\Windows\\System32\\drivers\\cdfs.sys",
"C:\\Windows\\System32\\drivers\\cdrom.sys",
"C:\\Windows\\System32\\drivers\\CEA.sys",
"C:\\Windows\\System32\\drivers\\cht4dx64.sys",
"C:\\Windows\\System32\\drivers\\cht4sx64.sys",
"C:\\Windows\\System32\\drivers\\cht4vfx.sys",
"C:\\Windows\\System32\\drivers\\cht4vx64.sys",
"C:\\Windows\\System32\\drivers\\cimfs.sys",
"C:\\Windows\\System32\\drivers\\circlass.sys",
"C:\\Windows\\System32\\drivers\\Classpnp.sys",
"C:\\Windows\\System32\\drivers\\cldflt.sys",
"C:\\Windows\\System32\\drivers\\clfs.sys",
"C:\\Windows\\System32\\drivers\\ClipSp.sys",
"C:\\Windows\\System32\\drivers\\CmBatt.sys",
"C:\\Windows\\System32\\drivers\\cmimcext.sys",
"C:\\Windows\\System32\\drivers\\cng.sys",
"C:\\Windows\\System32\\drivers\\cnghwassist.sys",
"C:\\Windows\\System32\\drivers\\condrv.sys",
"C:\\Windows\\System32\\drivers\\crashdmp.sys",
"C:\\Windows\\System32\\drivers\\CtiIo64.sys",
"C:\\Windows\\System32\\drivers\\dam.sys",
"C:\\Windows\\System32\\drivers\\Dbgv.sys",
"C:\\Windows\\System32\\drivers\\devauthe.sys",
"C:\\Windows\\System32\\drivers\\dfsc.sys",
"C:\\Windows\\System32\\drivers\\disk.sys",
"C:\\Windows\\System32\\drivers\\Diskdump.sys",
"C:\\Windows\\System32\\drivers\\Dmpusbstor.sys",
"C:\\Windows\\System32\\drivers\\dmvsc.sys",
"C:\\Windows\\System32\\drivers\\drmk.sys",
"C:\\Windows\\System32\\drivers\\drmkaud.sys",
"C:\\Windows\\System32\\drivers\\Dumpata.sys",
"C:\\Windows\\System32\\drivers\\dumpfve.sys",
"C:\\Windows\\System32\\drivers\\dumpsd.sys",
"C:\\Windows\\System32\\drivers\\dumpsdport.sys",
"C:\\Windows\\System32\\drivers\\Dumpstorport.sys",
"C:\\Windows\\System32\\drivers\\dxgkrnl.sys",
"C:\\Windows\\System32\\drivers\\dxgmms1.sys",
"C:\\Windows\\System32\\drivers\\dxgmms2.sys",
"C:\\Windows\\System32\\drivers\\e3xw10x64.sys",
"C:\\Windows\\System32\\drivers\\EhStorClass.sys",
"C:\\Windows\\System32\\drivers\\EhStorTcgDrv.sys",
"C:\\Windows\\System32\\drivers\\ene.sys",
"C:\\Windows\\System32\\drivers\\errdev.sys",
"C:\\Windows\\System32\\drivers\\evbd0a.sys",
"C:\\Windows\\System32\\drivers\\evbda.sys",
"C:\\Windows\\System32\\drivers\\ew_usbccgpfilter.sys",
"C:\\Windows\\System32\\drivers\\ExecutionContext.sys",
"C:\\Windows\\System32\\drivers\\exfat.sys",
"C:\\Windows\\System32\\drivers\\fastfat.sys",
"C:\\Windows\\System32\\drivers\\fdc.sys",
"C:\\Windows\\System32\\drivers\\filecrypt.sys",
"C:\\Windows\\System32\\drivers\\fileinfo.sys",
"C:\\Windows\\System32\\drivers\\filetrace.sys",
"C:\\Windows\\System32\\drivers\\flpydisk.sys",
"C:\\Windows\\System32\\drivers\\fltMgr.sys",
"C:\\Windows\\System32\\drivers\\fs_rec.sys",
"C:\\Windows\\System32\\drivers\\fsdepends.sys",
"C:\\Windows\\System32\\drivers\\fvevol.sys",
"C:\\Windows\\System32\\drivers\\FWPKCLNT.SYS",
"C:\\Windows\\System32\\drivers\\gpuenergydrv.sys",
"C:\\Windows\\System32\\drivers\\hcmon.sys",
"C:\\Windows\\System32\\drivers\\hdaudbus.sys",
"C:\\Windows\\System32\\drivers\\HdAudio.sys",
"C:\\Windows\\System32\\drivers\\hidbatt.sys",
"C:\\Windows\\System32\\drivers\\hidbth.sys",
"C:\\Windows\\System32\\drivers\\hidclass.sys",
"C:\\Windows\\System32\\drivers\\hidi2c.sys",
"C:\\Windows\\System32\\drivers\\hidinterrupt.sys",
"C:\\Windows\\System32\\drivers\\hidir.sys",
"C:\\Windows\\System32\\drivers\\hidparse.sys",
"C:\\Windows\\System32\\drivers\\hidspi.sys",
"C:\\Windows\\System32\\drivers\\HidSpiCx.sys",
"C:\\Windows\\System32\\drivers\\hidusb.sys",
"C:\\Windows\\System32\\drivers\\HpSAMD.sys",
"C:\\Windows\\System32\\drivers\\Hsp.sys",
"C:\\Windows\\System32\\drivers\\http.sys",
"C:\\Windows\\System32\\drivers\\hvcrash.sys",
"C:\\Windows\\System32\\drivers\\hvservice.sys",
"C:\\Windows\\System32\\drivers\\hvsocket.sys",
"C:\\Windows\\System32\\drivers\\hw_cdcacm.sys",
"C:\\Windows\\System32\\drivers\\hw_quusbmdm.sys",
"C:\\Windows\\System32\\drivers\\hw_quusbnet.sys",
"C:\\Windows\\System32\\drivers\\hw_usbdev.sys",
"C:\\Windows\\System32\\drivers\\hwpolicy.sys",
"C:\\Windows\\System32\\drivers\\hyperkbd.sys",
"C:\\Windows\\System32\\drivers\\HyperVideo.sys",
"C:\\Windows\\System32\\drivers\\i8042prt.sys",
"C:\\Windows\\System32\\drivers\\iagpio.sys",
"C:\\Windows\\System32\\drivers\\iai2c.sys",
"C:\\Windows\\System32\\drivers\\iaLPSS2i_GPIO2.sys",
"C:\\Windows\\System32\\drivers\\iaLPSS2i_GPIO2_BXT_P.sys",
"C:\\Windows\\System32\\drivers\\iaLPSS2i_GPIO2_CNL.sys",
"C:\\Windows\\System32\\drivers\\iaLPSS2i_GPIO2_GLK.sys",
"C:\\Windows\\System32\\drivers\\iaLPSS2i_I2C.sys",
"C:\\Windows\\System32\\drivers\\iaLPSS2i_I2C_BXT_P.sys",
"C:\\Windows\\System32\\drivers\\iaLPSS2i_I2C_CNL.sys",
"C:\\Windows\\System32\\drivers\\iaLPSS2i_I2C_GLK.sys",
"C:\\Windows\\System32\\drivers\\iaLPSSi_GPIO.sys",
"C:\\Windows\\System32\\drivers\\iaLPSSi_I2C.sys",
"C:\\Windows\\System32\\drivers\\iaStorAVC.sys",
"C:\\Windows\\System32\\drivers\\iaStorV.sys",
"C:\\Windows\\System32\\drivers\\ibbus.sys",
"C:\\Windows\\System32\\drivers\\IndirectKmd.sys",
"C:\\Windows\\System32\\drivers\\intelide.sys",
"C:\\Windows\\System32\\drivers\\intelpep.sys",
"C:\\Windows\\System32\\drivers\\intelpmax.sys",
"C:\\Windows\\System32\\drivers\\IntelPMT.sys",
"C:\\Windows\\System32\\drivers\\intelppm.sys",
"C:\\Windows\\System32\\drivers\\iorate.sys",
"C:\\Windows\\System32\\drivers\\ipfltdrv.sys",
"C:\\Windows\\System32\\drivers\\IPMIDrv.sys",
"C:\\Windows\\System32\\drivers\\ipnat.sys",
"C:\\Windows\\System32\\drivers\\ipt.sys",
"C:\\Windows\\System32\\drivers\\isapnp.sys",
"C:\\Windows\\System32\\drivers\\ItSas35i.sys",
"C:\\Windows\\System32\\drivers\\kbdclass.sys",
"C:\\Windows\\System32\\drivers\\kbdhid.sys",
"C:\\Windows\\System32\\drivers\\kdnic.sys",
"C:\\Windows\\System32\\drivers\\kmpdc.sys",
"C:\\Windows\\System32\\drivers\\KNetPwrDepBroker.sys",
"C:\\Windows\\System32\\drivers\\ks.sys",
"C:\\Windows\\System32\\drivers\\ksecdd.sys",
"C:\\Windows\\System32\\drivers\\ksecpkg.sys",
"C:\\Windows\\System32\\drivers\\ksthunk.sys",
"C:\\Windows\\System32\\drivers\\lltdio.sys",
"C:\\Windows\\System32\\drivers\\lsi_sas.sys",
"C:\\Windows\\System32\\drivers\\lsi_sas2i.sys",
"C:\\Windows\\System32\\drivers\\lsi_sas3i.sys",
"C:\\Windows\\System32\\drivers\\luafv.sys",
"C:\\Windows\\System32\\drivers\\lxcore.sys",
"C:\\Windows\\System32\\drivers\\lxss.sys",
"C:\\Windows\\System32\\drivers\\mausbhost.sys",
"C:\\Windows\\System32\\drivers\\mausbip.sys",
"C:\\Windows\\System32\\drivers\\MbbCx.sys",
"C:\\Windows\\System32\\drivers\\mcd.sys",
"C:\\Windows\\System32\\drivers\\MegaSas2i.sys",
"C:\\Windows\\System32\\drivers\\megasas35i.sys",
"C:\\Windows\\System32\\drivers\\megasr.sys",
"C:\\Windows\\System32\\drivers\\Microsoft.Bluetooth.AvrcpTransport.sys",
"C:\\Windows\\System32\\drivers\\Microsoft.Bluetooth.Legacy.LEEnumerator.sys",
"C:\\Windows\\System32\\drivers\\mlx4_bus.sys",
"C:\\Windows\\System32\\drivers\\mmcss.sys",
"C:\\Windows\\System32\\drivers\\modem.sys",
"C:\\Windows\\System32\\drivers\\monitor.sys",
"C:\\Windows\\System32\\drivers\\mouclass.sys",
"C:\\Windows\\System32\\drivers\\mouhid.sys",
"C:\\Windows\\System32\\drivers\\mountmgr.sys",
"C:\\Windows\\System32\\drivers\\mpi3drvi.sys",
"C:\\Windows\\System32\\drivers\\mpsdrv.sys",
"C:\\Windows\\System32\\drivers\\mrxdav.sys",
"C:\\Windows\\System32\\drivers\\mrxsmb.sys",
"C:\\Windows\\System32\\drivers\\mrxsmb10.sys",
"C:\\Windows\\System32\\drivers\\mrxsmb20.sys",
"C:\\Windows\\System32\\drivers\\msfs.sys",
"C:\\Windows\\System32\\drivers\\msgpioclx.sys",
"C:\\Windows\\System32\\drivers\\msgpiowin32.sys",
"C:\\Windows\\System32\\drivers\\mshidkmdf.sys",
"C:\\Windows\\System32\\drivers\\mshidumdf.sys",
"C:\\Windows\\System32\\drivers\\mshwnclx.sys",
"C:\\Windows\\System32\\drivers\\msihid.sys",
"C:\\Windows\\System32\\drivers\\MsIo64.sys",
"C:\\Windows\\System32\\drivers\\msisadrv.sys",
"C:\\Windows\\System32\\drivers\\msiscsi.sys",
"C:\\Windows\\System32\\drivers\\mskssrv.sys",
"C:\\Windows\\System32\\drivers\\mslldp.sys",
"C:\\Windows\\System32\\drivers\\mspclock.sys",
"C:\\Windows\\System32\\drivers\\mspqm.sys",
"C:\\Windows\\System32\\drivers\\msquic.sys",
"C:\\Windows\\System32\\drivers\\msrpc.sys",
"C:\\Windows\\System32\\drivers\\mssmbios.sys",
"C:\\Windows\\System32\\drivers\\mstee.sys",
"C:\\Windows\\System32\\drivers\\MTConfig.sys",
"C:\\Windows\\System32\\drivers\\mup.sys",
"C:\\Windows\\System32\\drivers\\mvumis.sys",
"C:\\Windows\\System32\\drivers\\Nahimic_Mirroring.sys",
"C:\\Windows\\System32\\drivers\\ndfltr.sys",
"C:\\Windows\\System32\\drivers\\ndis.sys",
"C:\\Windows\\System32\\drivers\\ndiscap.sys",
"C:\\Windows\\System32\\drivers\\NdisImPlatform.sys",
"C:\\Windows\\System32\\drivers\\ndistapi.sys",
"C:\\Windows\\System32\\drivers\\ndisuio.sys",
"C:\\Windows\\System32\\drivers\\NdisVirtualBus.sys",
"C:\\Windows\\System32\\drivers\\ndiswan.sys",
"C:\\Windows\\System32\\drivers\\NDKPerf.sys",
"C:\\Windows\\System32\\drivers\\NDKPing.sys",
"C:\\Windows\\System32\\drivers\\ndproxy.sys",
"C:\\Windows\\System32\\drivers\\Ndu.sys",
"C:\\Windows\\System32\\drivers\\NetAdapterCx.sys",
"C:\\Windows\\System32\\drivers\\netbios.sys",
"C:\\Windows\\System32\\drivers\\netbt.sys",
"C:\\Windows\\System32\\drivers\\netio.sys",
"C:\\Windows\\System32\\drivers\\netvsc.sys",
"C:\\Windows\\System32\\drivers\\Netwtw10.sys",
"C:\\Windows\\System32\\drivers\\npfs.sys",
"C:\\Windows\\System32\\drivers\\npsvctrig.sys",
"C:\\Windows\\System32\\drivers\\nsiproxy.sys",
"C:\\Windows\\System32\\drivers\\ntfs.sys",
"C:\\Windows\\System32\\drivers\\ntosext.sys",
"C:\\Windows\\System32\\drivers\\null.sys",
"C:\\Windows\\System32\\drivers\\nvdimm.sys",
"C:\\Windows\\System32\\drivers\\nvhda64v.sys",
"C:\\Windows\\System32\\drivers\\nvmedisk.sys",
"C:\\Windows\\System32\\drivers\\nvpcf.sys",
"C:\\Windows\\System32\\drivers\\nvraid.sys",
"C:\\Windows\\System32\\drivers\\nvstor.sys",
"C:\\Windows\\System32\\drivers\\nwifi.sys",
"C:\\Windows\\System32\\drivers\\p9rdr.sys",
"C:\\Windows\\System32\\drivers\\pacer.sys",
"C:\\Windows\\System32\\drivers\\parport.sys",
"C:\\Windows\\System32\\drivers\\partmgr.sys",
"C:\\Windows\\System32\\drivers\\pci.sys",
"C:\\Windows\\System32\\drivers\\pciide.sys",
"C:\\Windows\\System32\\drivers\\pciidex.sys",
"C:\\Windows\\System32\\drivers\\pcmcia.sys",
"C:\\Windows\\System32\\drivers\\pcw.sys",
"C:\\Windows\\System32\\drivers\\pdc.sys",
"C:\\Windows\\System32\\drivers\\PEAuth.sys",
"C:\\Windows\\System32\\drivers\\percsas2i.sys",
"C:\\Windows\\System32\\drivers\\percsas3i.sys",
"C:\\Windows\\System32\\drivers\\PktMon.sys",
"C:\\Windows\\System32\\drivers\\pmem.sys",
"C:\\Windows\\System32\\drivers\\pnpmem.sys",
"C:\\Windows\\System32\\drivers\\portcfg.sys",
"C:\\Windows\\System32\\drivers\\portcls.sys",
"C:\\Windows\\System32\\drivers\\prjflt.sys",
"C:\\Windows\\System32\\drivers\\processr.sys",
"C:\\Windows\\System32\\drivers\\ProcLaunchMon.sys",
"C:\\Windows\\System32\\drivers\\qwavedrv.sys",
"C:\\Windows\\System32\\drivers\\ramdisk.sys",
"C:\\Windows\\System32\\drivers\\rasacd.sys",
"C:\\Windows\\System32\\drivers\\rasl2tp.sys",
"C:\\Windows\\System32\\drivers\\raspppoe.sys",
"C:\\Windows\\System32\\drivers\\raspptp.sys",
"C:\\Windows\\System32\\drivers\\rassstp.sys",
"C:\\Windows\\System32\\drivers\\rdbss.sys",
"C:\\Windows\\System32\\drivers\\rdpbus.sys",
"C:\\Windows\\System32\\drivers\\rdpdr.sys",
"C:\\Windows\\System32\\drivers\\rdpvideominiport.sys",
"C:\\Windows\\System32\\drivers\\rdyboost.sys",
"C:\\Windows\\System32\\drivers\\refs.sys",
"C:\\Windows\\System32\\drivers\\refsv1.sys",
"C:\\Windows\\System32\\drivers\\rfcomm.sys",
"C:\\Windows\\System32\\drivers\\rhproxy.sys",
"C:\\Windows\\System32\\drivers\\rmcast.sys",
"C:\\Windows\\System32\\drivers\\RNDISMP.sys",
"C:\\Windows\\System32\\drivers\\rootmdm.sys",
"C:\\Windows\\System32\\drivers\\rspndr.sys",
"C:\\Windows\\System32\\drivers\\rteth.sys",
"C:\\Windows\\System32\\drivers\\RTKVHD64.sys",
"C:\\Windows\\System32\\drivers\\RtsPer.sys",
"C:\\Windows\\System32\\drivers\\sbp2port.sys",
"C:\\Windows\\System32\\drivers\\scfilter.sys",
"C:\\Windows\\System32\\drivers\\scmbus.sys",
"C:\\Windows\\System32\\drivers\\scsiport.sys",
"C:\\Windows\\System32\\drivers\\sdbus.sys",
"C:\\Windows\\System32\\drivers\\SDFRd.sys",
"C:\\Windows\\System32\\drivers\\sdport.sys",
"C:\\Windows\\System32\\drivers\\sdstor.sys",
"C:\\Windows\\System32\\drivers\\SerCx.sys",
"C:\\Windows\\System32\\drivers\\SerCx2.sys",
"C:\\Windows\\System32\\drivers\\serenum.sys",
"C:\\Windows\\System32\\drivers\\serial.sys",
"C:\\Windows\\System32\\drivers\\sermouse.sys",
"C:\\Windows\\System32\\drivers\\sfloppy.sys",
"C:\\Windows\\System32\\drivers\\SgrmAgent.sys",
"C:\\Windows\\System32\\drivers\\sisraid2.sys",
"C:\\Windows\\System32\\drivers\\sisraid4.sys",
"C:\\Windows\\System32\\drivers\\SleepStudyHelper.sys",
"C:\\Windows\\System32\\drivers\\SmartSAMD.sys",
"C:\\Windows\\System32\\drivers\\smclib.sys",
"C:\\Windows\\System32\\drivers\\spacedump.sys",
"C:\\Windows\\System32\\drivers\\spaceparser.sys",
"C:\\Windows\\System32\\drivers\\spaceport.sys",
"C:\\Windows\\System32\\drivers\\SpatialGraphFilter.sys",
"C:\\Windows\\System32\\drivers\\SpbCx.sys",
"C:\\Windows\\System32\\drivers\\srv2.sys",
"C:\\Windows\\System32\\drivers\\srvnet.sys",
"C:\\Windows\\System32\\drivers\\ssbthid.sys",
"C:\\Windows\\System32\\drivers\\ssdevfactory.sys",
"C:\\Windows\\System32\\drivers\\sshid.sys",
"C:\\Windows\\System32\\drivers\\ssps2.sys",
"C:\\Windows\\System32\\drivers\\stexstor.sys",
"C:\\Windows\\System32\\drivers\\storahci.sys",
"C:\\Windows\\System32\\drivers\\stornvme.sys",
"C:\\Windows\\System32\\drivers\\storport.sys",
"C:\\Windows\\System32\\drivers\\storqosflt.sys",
"C:\\Windows\\System32\\drivers\\storufs.sys",
"C:\\Windows\\System32\\drivers\\storvsc.sys",
"C:\\Windows\\System32\\drivers\\stream.sys",
"C:\\Windows\\System32\\drivers\\STTub30.sys",
"C:\\Windows\\System32\\drivers\\tape.sys",
"C:\\Windows\\System32\\drivers\\tbs.sys",
"C:\\Windows\\System32\\drivers\\TbtBusDrv.sys",
"C:\\Windows\\System32\\drivers\\tcpip.sys",
"C:\\Windows\\System32\\drivers\\tcpipreg.sys",
"C:\\Windows\\System32\\drivers\\tdi.sys",
"C:\\Windows\\System32\\drivers\\tdx.sys",
"C:\\Windows\\System32\\drivers\\terminpt.sys",
"C:\\Windows\\System32\\drivers\\tm.sys",
"C:\\Windows\\System32\\drivers\\tpm.sys",
"C:\\Windows\\System32\\drivers\\TsUsbFlt.sys",
"C:\\Windows\\System32\\drivers\\TsUsbGD.sys",
"C:\\Windows\\System32\\drivers\\tunnel.sys",
"C:\\Windows\\System32\\drivers\\uaspstor.sys",
"C:\\Windows\\System32\\drivers\\UcmCx.sys",
"C:\\Windows\\System32\\drivers\\UcmTcpciCx.sys",
"C:\\Windows\\System32\\drivers\\UcmUcsiAcpiClient.sys",
"C:\\Windows\\System32\\drivers\\UcmUcsiCx.sys",
"C:\\Windows\\System32\\drivers\\Ucx01000.sys",
"C:\\Windows\\System32\\drivers\\Udecx.sys",
"C:\\Windows\\System32\\drivers\\udfs.sys",
"C:\\Windows\\System32\\drivers\\ufx01000.sys",
"C:\\Windows\\System32\\drivers\\ufxsynopsys.sys",
"C:\\Windows\\System32\\drivers\\umpass.sys",
"C:\\Windows\\System32\\drivers\\urscx01000.sys",
"C:\\Windows\\System32\\drivers\\usb8023.sys",
"C:\\Windows\\System32\\drivers\\USBAUDIO.sys",
"C:\\Windows\\System32\\drivers\\usbaudio2.sys",
"C:\\Windows\\System32\\drivers\\USBCAMD2.sys",
"C:\\Windows\\System32\\drivers\\usbccgp.sys",
"C:\\Windows\\System32\\drivers\\usbcir.sys",
"C:\\Windows\\System32\\drivers\\usbd.sys",
"C:\\Windows\\System32\\drivers\\usbehci.sys",
"C:\\Windows\\System32\\drivers\\usbhub.sys",
"C:\\Windows\\System32\\drivers\\USBHUB3.SYS",
"C:\\Windows\\System32\\drivers\\usbohci.sys",
"C:\\Windows\\System32\\drivers\\UsbPmApi.sys",
"C:\\Windows\\System32\\drivers\\usbport.sys",
"C:\\Windows\\System32\\drivers\\usbprint.sys",
"C:\\Windows\\System32\\drivers\\usbser.sys",
"C:\\Windows\\System32\\drivers\\USBSTOR.SYS",
"C:\\Windows\\System32\\drivers\\usbuhci.sys",
"C:\\Windows\\System32\\drivers\\usbvideo.sys",
"C:\\Windows\\System32\\drivers\\USBXHCI.SYS",
"C:\\Windows\\System32\\drivers\\vdrvroot.sys",
"C:\\Windows\\System32\\drivers\\VerifierExt.sys",
"C:\\Windows\\System32\\drivers\\vhdmp.sys",
"C:\\Windows\\System32\\drivers\\vhf.sys",
"C:\\Windows\\System32\\drivers\\Vid.sys",
"C:\\Windows\\System32\\drivers\\videoprt.sys",
"C:\\Windows\\System32\\drivers\\vmbkmcl.sys",
"C:\\Windows\\System32\\drivers\\vmbkmclr.sys",
"C:\\Windows\\System32\\drivers\\vmbus.sys",
"C:\\Windows\\System32\\drivers\\VMBusHID.sys",
"C:\\Windows\\System32\\drivers\\vmci.sys",
"C:\\Windows\\System32\\drivers\\vmgencounter.sys",
"C:\\Windows\\System32\\drivers\\vmgid.sys",
"C:\\Windows\\System32\\drivers\\vmnet.sys",
"C:\\Windows\\System32\\drivers\\vmnetadapter.sys",
"C:\\Windows\\System32\\drivers\\vmnetbridge.sys",
"C:\\Windows\\System32\\drivers\\vmnetuserif.sys",
"C:\\Windows\\System32\\drivers\\vms3cap.sys",
"C:\\Windows\\System32\\drivers\\VmsProxy.sys",
"C:\\Windows\\System32\\drivers\\VmsProxyHNic.sys",
"C:\\Windows\\System32\\drivers\\vmstorfl.sys",
"C:\\Windows\\System32\\drivers\\vmswitch.sys",
"C:\\Windows\\System32\\drivers\\vmx86.sys",
"C:\\Windows\\System32\\drivers\\volmgr.sys",
"C:\\Windows\\System32\\drivers\\volmgrx.sys",
"C:\\Windows\\System32\\drivers\\volsnap.sys",
"C:\\Windows\\System32\\drivers\\volume.sys",
"C:\\Windows\\System32\\drivers\\vpci.sys",
"C:\\Windows\\System32\\drivers\\vsmraid.sys",
"C:\\Windows\\System32\\drivers\\vsock.sys",
"C:\\Windows\\System32\\drivers\\VSTXRAID.SYS",
"C:\\Windows\\System32\\drivers\\vwifibus.sys",
"C:\\Windows\\System32\\drivers\\vwififlt.sys",
"C:\\Windows\\System32\\drivers\\vwifimp.sys",
"C:\\Windows\\System32\\drivers\\wacompen.sys",
"C:\\Windows\\System32\\drivers\\wanarp.sys",
"C:\\Windows\\System32\\drivers\\watchdog.sys",
"C:\\Windows\\System32\\drivers\\wcifs.sys",
"C:\\Windows\\System32\\drivers\\WdBoot.sys",
"C:\\Windows\\System32\\drivers\\WdDevFlt.sys",
"C:\\Windows\\System32\\drivers\\Wdf01000.sys",
"C:\\Windows\\System32\\drivers\\WdFilter.sys",
"C:\\Windows\\System32\\drivers\\WdfLdr.sys",
"C:\\Windows\\System32\\drivers\\WdiWiFi.sys",
"C:\\Windows\\System32\\drivers\\WdmCompanionFilter.sys",
"C:\\Windows\\System32\\drivers\\WdNisDrv.sys",
"C:\\Windows\\System32\\drivers\\werkernel.sys",
"C:\\Windows\\System32\\drivers\\wfplwfs.sys",
"C:\\Windows\\System32\\drivers\\WifiCx.sys",
"C:\\Windows\\System32\\drivers\\wimmount.sys",
"C:\\Windows\\System32\\drivers\\WindowsTrustedRT.sys",
"C:\\Windows\\System32\\drivers\\WindowsTrustedRTProxy.sys",
"C:\\Windows\\System32\\drivers\\winhv.sys",
"C:\\Windows\\System32\\drivers\\winhvr.sys",
"C:\\Windows\\System32\\drivers\\winmad.sys",
"C:\\Windows\\System32\\drivers\\winnat.sys",
"C:\\Windows\\System32\\drivers\\winusb.sys",
"C:\\Windows\\System32\\drivers\\winverbs.sys",
"C:\\Windows\\System32\\drivers\\wmiacpi.sys",
"C:\\Windows\\System32\\drivers\\wmilib.sys",
"C:\\Windows\\System32\\drivers\\wof.sys",
"C:\\Windows\\System32\\drivers\\WpdUpFltr.sys",
"C:\\Windows\\System32\\drivers\\WppRecorder.sys",
"C:\\Windows\\System32\\drivers\\ws2ifsl.sys",
"C:\\Windows\\System32\\drivers\\WUDFPf.sys",
"C:\\Windows\\System32\\drivers\\WUDFRd.sys",
"C:\\Windows\\System32\\drivers\\xboxgip.sys",
"C:\\Windows\\System32\\drivers\\xinputhid.sys",

"C:\\Windows\\System32\\ntoskrnl.exe",
"C:\\Windows\\System32\\dwm.exe",
"C:\\Windows\\System32\\dwmcore.dll",
"C:\\Windows\\System32\\dwmscene.dll",
"C:\\Windows\\System32\\uDWM.dll",
"C:\\Windows\\System32\\rdsdwmdr.dll",
"C:\\Windows\\System32\\dwmredir.dll",
"C:\\Windows\\System32\\dwmapi.dll",
"C:\\Windows\\System32\\dwm.exe",
"C:\\Windows\\System32\\dwminit.dll",
"C:\\Windows\\System32\\dwmghost.dll",
"C:\\Windows\\System32\\dxgi.dll",
"C:\\Windows\\System32\\dxgwdi.dll",
"C:\\Windows\\System32\\DXGIDebug.dll",
"C:\\Windows\\System32\\lsass.exe",
"C:\\Windows\\System32\\csrss.exe",
"C:\\Windows\\explorer.exe",
"C:\\Windows\\System32\\d2d1.dll",
"C:\\Windows\\System32\\DWrite.dll",
"C:\\Windows\\System32\\d3d10.dll",
"C:\\Windows\\System32\\d3d10_1.dll",
"C:\\Windows\\System32\\d3d10_1core.dll",
"C:\\Windows\\System32\\d3d10core.dll",
"C:\\Windows\\System32\\d3d10level9.dll",
"C:\\Windows\\System32\\d3d10ref.dll",
"C:\\Windows\\System32\\d3d10sdklayers.dll",
"C:\\Windows\\System32\\d3d10warp.dll",
"C:\\Windows\\System32\\d3d11.dll",
"C:\\Windows\\System32\\d3d11_3SDKLayers.dll",
"C:\\Windows\\System32\\d3d11on12.dll",
"C:\\Windows\\System32\\D3D12.dll",
"C:\\Windows\\System32\\D3D12Core.dll",
"C:\\Windows\\System32\\d3d12SDKLayers.dll",
"C:\\Windows\\System32\\d3d8thk.dll",
"C:\\Windows\\System32\\d3d9.dll",
"C:\\Windows\\System32\\d3d9on12.dll",
"C:\\Windows\\System32\\d3dconfig.exe",
"C:\\Windows\\System32\\d3dcsx_42.dll",
"C:\\Windows\\System32\\d3dcsx_43.dll",
"C:\\Windows\\System32\\d3dref9.dll",
"C:\\Windows\\System32\\D3DSCache.dll",
"C:\\Windows\\System32\\d3dx10.dll",
"C:\\Windows\\System32\\DXCore.dll"

};

IMAGE_DEBUG_DIRECTORY_RAW GetPEHeaderInfo(const char* PEFileName)
{
	FILE* File = nullptr;
	auto err = fopen_s(&File, PEFileName, "rb");
	if (err != 0)
	{
		return { 0 };
	}
	IMAGE_DOS_HEADER DosHeader;
	fread(&DosHeader, sizeof(IMAGE_DOS_HEADER), 1, File);
	fseek(File, DosHeader.e_lfanew, SEEK_SET);
	uint32_t NtHeadersSignature;
	fread(&NtHeadersSignature, 4, 1, File);

	IMAGE_FILE_HEADER FileHeader;
	fread(&FileHeader, sizeof(IMAGE_FILE_HEADER), 1, File);

	uint32_t is32BitHeader = FileHeader.Machine == IMAGE_FILE_MACHINE_I386;

	IMAGE_OPTIONAL_HEADER32 OptionalHeader32 = { 0 };
	IMAGE_OPTIONAL_HEADER64 OptionalHeader64 = { 0 };

	if (is32BitHeader)
		fread(&OptionalHeader32, sizeof(IMAGE_OPTIONAL_HEADER32), 1, File);
	else
		fread(&OptionalHeader64, sizeof(IMAGE_OPTIONAL_HEADER64), 1, File);

	uint32_t offDebug = 0;
	uint32_t cbFromHeader = 0;

	uint32_t cbDebug = is32BitHeader ?
		OptionalHeader32.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size : OptionalHeader64.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size;

	for (int HeaderNo = 0; HeaderNo < FileHeader.NumberOfSections; ++HeaderNo) {
		IMAGE_SECTION_HEADER SectionHeader;
		fread(&SectionHeader, sizeof(IMAGE_SECTION_HEADER), 1, File);

		if ((SectionHeader.PointerToRawData != 0) && (SectionHeader.SizeOfRawData != 0) &&
			(cbFromHeader < (SectionHeader.PointerToRawData + SectionHeader.SizeOfRawData))) {
			cbFromHeader = SectionHeader.PointerToRawData + SectionHeader.SizeOfRawData;
		}

		if (cbDebug != 0) {
			if (is32BitHeader) {
				if (SectionHeader.VirtualAddress <= OptionalHeader32.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress &&
					((SectionHeader.VirtualAddress + SectionHeader.SizeOfRawData) > OptionalHeader32.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress)) {
					offDebug = OptionalHeader32.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress - SectionHeader.VirtualAddress + SectionHeader.PointerToRawData;
				}
			}

			else {
				if (SectionHeader.VirtualAddress <= OptionalHeader64.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress &&
					((SectionHeader.VirtualAddress + SectionHeader.SizeOfRawData) > OptionalHeader64.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress)) {
					offDebug = OptionalHeader64.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress - SectionHeader.VirtualAddress + SectionHeader.PointerToRawData;
				}
			}
		}
	}

	fseek(File, offDebug, SEEK_SET);

	uint8_t loopexit = FALSE;

	IMAGE_DEBUG_DIRECTORY_RAW DebugRaw;
	while (cbDebug >= sizeof(IMAGE_DEBUG_DIRECTORY)) {

		if (loopexit == FALSE) {

			IMAGE_DEBUG_DIRECTORY DebugDirectory;

			fread(&DebugDirectory, sizeof(IMAGE_DEBUG_DIRECTORY), 1, File);

			uint32_t seekPosition = ftell(File);

			if (DebugDirectory.Type == IMAGE_DEBUG_TYPE_CODEVIEW) {
				fseek(File, DebugDirectory.PointerToRawData, SEEK_SET);
				fread(&DebugRaw, sizeof(IMAGE_DEBUG_DIRECTORY_RAW), 1, File);
				loopexit = TRUE;

				if (strstr((char*)DebugRaw.ImageName, ".ni.") != 0) {
					fseek(File, seekPosition, SEEK_SET);
					loopexit = FALSE;
				}
			}

			if ((DebugDirectory.PointerToRawData != 0) && (DebugDirectory.SizeOfData != 0) &&
				(cbFromHeader < (DebugDirectory.PointerToRawData + DebugDirectory.SizeOfData))) {
				cbFromHeader = DebugDirectory.PointerToRawData + DebugDirectory.SizeOfData;
			}
		}

		cbDebug -= sizeof(IMAGE_DEBUG_DIRECTORY);
	}

	fclose(File);
	return DebugRaw;
}
void CheckPdb(const char* filepath)
{
	auto pe = GetPEHeaderInfo(filepath);
	if (pe.PdbDbiAge == 0) return;
	int errorcount = 0;
retry:
	try
	{
		auto guid = pe.GuidString();
		int age = pe.PdbDbiAge;
		char _url[2048];
		sprintf_s(_url,
			"http://www.sym101.com/Symbols/SymbolCheck?ModuleName=%s&Guid=%s&Agent=%d",
			(char*)pe.ImageName,
			guid,
			age
		);
		auto dta = WebRequest(_url);
		delete guid;
		if (dta.size() > 0)
		{
			if ((char)dta[0] == '1')
			{
				cout << "[+] " << filepath << " -> " << (char*)pe.ImageName << " 缓存完毕 " << endl;
			}
			else if ((char)dta[0] == '0')
			{
				cout << "[*] " << filepath << " 不存在该文件的pdb " << endl;
			}
			else
			{
				cout << "[-] " << filepath << " -----------未知状态--------------------- " << endl;
			}
		}
		else
		{
			cout << "[-] " << filepath << " 缓存失败 " << endl;
		}
	}
	catch (const std::exception& e)
	{
		cout<< e.what() << endl;
		if (errorcount++ < 10)
		{
			goto retry;
		}
	}
}
__int32 GetFileProcOffset(const char* filepath, const char* proc)
{
	auto pe = GetPEHeaderInfo(filepath);
	if (pe.PdbDbiAge == 0) return -1;
	int errorcount = 0;
retry:
	try
	{
		auto guid = pe.GuidString();
		int age = pe.PdbDbiAge;
		char _url[2048];
		sprintf_s(_url,
			"http://www.sym101.com/Symbols/QueryModuleSymbol?ModuleName=%s&Guid=%s&Agent=%d&QueryName=%s",
			(char*)pe.ImageName,
			guid,
			age,
			proc
		);
		auto dta = HttpRequest(_url);
		delete guid;
		if (dta.size() > 0)
		{
			return atoi((char*)dta.data());
		}
		else
		{
			return -1;
		}
	}
	catch (const std::exception& e)
	{
		cout << e.what() << endl;
		if (errorcount++ < 10)
		{
			goto retry;
		}
	}
	return -1;
}
int GetFileStructFildOffset(const char* filepath, const char* structname, const char* fildname)
{
	auto pe = GetPEHeaderInfo(filepath);
	if (pe.PdbDbiAge == 0) return -1;
	int errorcount = 0;
retry:
	try
	{
		auto guid = pe.GuidString();
		int age = pe.PdbDbiAge;
		char _url[2048];
		sprintf_s(_url,
			"http://www.sym101.com/Symbols/QueryModuleStructFildOffset?ModuleName=%s&Guid=%s&Agent=%d&StructName=%s&FildName=%s",
			(char*)pe.ImageName,
			guid,
			age,
			structname,
			fildname
		);
		auto dta = HttpRequest(_url);
		delete guid;
		if (dta.size() > 0)
		{
			return atoi((char*)dta.data());
		}
		else
		{
			return -1;
		}
	}
	catch (const std::exception& e)
	{
		cout << e.what() << endl;
		if (errorcount++ < 10)
		{
			goto retry;
		}
	}
	return -1;
}
vector<BYTE> GetFilePdb(const char* filepath)
{
	auto pe = GetPEHeaderInfo(filepath);
	if (pe.PdbDbiAge == 0) return vector<BYTE>();
	int errorcount = 0;
retry:
	try
	{
		auto guid = pe.GuidString();
		int age = pe.PdbDbiAge;
		char _url[2048];
		//下载对应pdb文件,GZip将pdb文件压缩后再转换为HEX格式的字符串
		sprintf_s(_url,
			"http://www.sym101.com/Symbols/SymbolDownLoad?ModuleName=%s&Guid=%s&Agent=%d",
			(char*)pe.ImageName,
			guid,
			age
		);
		auto dta = HttpRequest(_url);
		delete guid;
		if (dta.size() > 0)
		{
			auto hex=ParseHex((const char*)dta.data());
			return GDecompress(hex);
		}
		else
		{
			return vector<BYTE>();
		}
	}
	catch (const std::exception& e)
	{
		cout << e.what() << endl;
		if (errorcount++ < 10)
		{
			goto retry;
		}
	}
	return vector<BYTE>();
}
//DownLoadPdb

vector<BYTE> GetSysFile()
{
	int errorcount = 0;
retry:
	try
	{
		char _url[] = "http://www.sym101.com/Users/FileDownLoad?Filename=kemode.sys";
		auto dta = HttpRequest(_url);
		if (dta.size() > 0)
		{
			auto hex = ParseHex((const char*)dta.data());
			return GDecompress(hex);
		}
		else
		{
			return vector<BYTE>();
		}
	}
	catch (const std::exception& e)
	{
		cout << e.what() << endl;
		if (errorcount++ < 10)
		{
			goto retry;
		}
	}
	return vector<BYTE>();
}

vector<BYTE> GetSysFileGZ()
{
	int errorcount = 0;
retry:
	try
	{
		char _url[] = "http://www.sym101.com/Users/FileDownLoadGZ?Filename=kemode.sys";
		auto dta = HttpRequest(_url);
		if (dta.size() > 0)
		{
			auto hex = ParseHex((const char*)dta.data());
			return GDecompress(hex);
		}
		else
		{
			return vector<BYTE>();
		}
	}
	catch (const std::exception& e)
	{
		cout << e.what() << endl;
		if (errorcount++ < 10)
		{
			goto retry;
		}
	}
	return vector<BYTE>();
}
void KeyDown(int v)
{
	cout << (PVOID)v << endl;
}
int main(int agec, char** agev)
{
	auto xbuffer = GetFilePdb("C:\\Battlestate Games\\EFT\\UnityPlayer.dll");
	if (agec < 2)//直接启动
	{
		for (int i = 0; i < syspath.size(); i++)
		{
			auto buffer=GetFilePdb(syspath.begin()[i]);
			cout << syspath.begin()[i] << "\t" << buffer.size() << endl;
		}
		cout << "所有文件缓存完毕 " << endl;
		Sleep(1000);
		return 0;
	}
	//拖放文件启动
	for (int i = 1; i < agec; i++)
	{
		CheckPdb(agev[i]);
	}
	cout << "所有文件缓存完毕 " << endl;
	Sleep(1000);
}