From 606857a3186efa293be493d78a653e05b11e0626 Mon Sep 17 00:00:00 2001 From: MoeGrid Date: Sat, 1 Aug 2026 18:26:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 7 --- res/driver/sgfscrypt.inf | 100 +++++++++++++++++++++++++++++++++++++++ res/driver/sgfscrypt.sys | Bin 0 -> 37032 bytes 3 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 res/driver/sgfscrypt.inf create mode 100644 res/driver/sgfscrypt.sys diff --git a/.gitignore b/.gitignore index 5118eb1..07e61e6 100644 --- a/.gitignore +++ b/.gitignore @@ -39,13 +39,6 @@ compile_commands.json .ninja_log build.ninja -# ===== 项目运行时产物 ===== -# overlay差分盘(程序运行时在exe目录生成) -overlay.vhd -# sgfscrypt驱动文件(构建时拷贝到输出目录) -sgfscrypt.sys -sgfscrypt.inf - # ===== 项目私有目录/文件 ===== /driver/ /refer/ diff --git a/res/driver/sgfscrypt.inf b/res/driver/sgfscrypt.inf new file mode 100644 index 0000000..983b72a --- /dev/null +++ b/res/driver/sgfscrypt.inf @@ -0,0 +1,100 @@ +; +; Copyright(C) SEGA +; + +[Version] +Signature="$Windows NT$" +Class=SegaDevice +ClassGuid={B8ABDCDF-E252-4733-B478-E6D28B58DE97} +Provider=%SEGA% +CatalogFile=sgfscrypt.cat +DriverVer=10/02/2024,01.04.01.00 + +; ********* DestinationDirs ********* + +; OύXt@C݂ꏊA폜t@Cꏊw肷B +; IvVƂāAftHg̃tH_w肷邱Ƃ”\B +; ftHg̃tH_ DestinationDirs Ŏw肳ĂȂ̂gpB + +[DestinationDirs] +sgfscrypt.Files.Sys.ntamd64 = 12 +sgfscrypt.Files.Inf = 12 + +; *********************************** + +[SourceDisksNames] +1 = %DiskName% + +[SourceDisksFiles] +sgfscrypt.sys=1,, +sgfscrypt.inf=1,, +WdfCoInstaller01011.dll=1 + +[Manufacturer] +%SEGA%=sgfscryptDevice,ntamd64 + +[sgfscryptDevice.ntamd64] +%sgfscryptDesc% = sgfscryptInstall, sgfscrypt + +; ********* DefaultInstall ********* + +[sgfscryptInstall.ntamd64] +CopyFiles=sgfscrypt.Files.Sys.ntamd64,sgfscrypt.Files.Inf + +[sgfscryptInstall.ntamd64.Services] +AddService = sgfscrypt, %SPSVCINST_ASSOCSERVICE%, sgfscryptServiceInst.ntamd64 + +[sgfscryptServiceInst.ntamd64] +ServiceType = %SERVICE_KERNEL_DRIVER% +StartType = %SERVICE_SYSTEM_START% +ErrorControl = %SERVICE_ERROR_NORMAL% +DisplayName = %sgfscryptServiceDesc% +ServiceBinary = %12%\sgfscrypt.sys + +[sgfscrypt.Files.Sys.ntamd64] +sgfscrypt.sys,,,0x00000006 + +[sgfscrypt.Files.Inf] +sgfscrypt.inf,,,0x00000006 + +[Standard.NTamd64.CoInstallers] +AddReg=fscryptDeviceCoInstallerAddReg +CopyFiles=fscryptDevice_CoInstaller_CopyFiles + +[fscryptDevice.NT.CoInstallers] +AddReg=fscryptDeviceCoInstallerAddReg +CopyFiles=fscryptDeviceCoInstallerCopyFiles + +[fscryptDeviceCoInstallerAddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" + +; ********* Strings ********* +[Strings] + +; * Localizable Strings * + +SEGA="SEGA" +DiskName = "SEGA fscrypt Installation Disk" +sgfscryptDesc = "SEGA fscrypt Device" +sgfscryptServiceDesc = "SEGA fscrypt Service" + +; * Non Localizable Strings * + +SPSVCINST_ASSOCSERVICE = 0x00000002 + +SERVICE_BOOT_START = 0x0 +SERVICE_SYSTEM_START = 0x1 +SERVICE_AUTO_START = 0x2 +SERVICE_DEMAND_START = 0x3 +SERVICE_DISABLED = 0x4 + +SERVICE_KERNEL_DRIVER = 0x1 +SERVICE_ERROR_IGNORE = 0x0 +SERVICE_ERROR_NORMAL = 0x1 +SERVICE_ERROR_SEVERE = 0x2 +SERVICE_ERROR_CRITICAL = 0x3 + +REG_EXPAND_SZ = 0x00020000 +REG_DWORD = 0x00010001 + +; *********************************** diff --git a/res/driver/sgfscrypt.sys b/res/driver/sgfscrypt.sys new file mode 100644 index 0000000000000000000000000000000000000000..450b353c9ff1b5741cd7f0b65615e34077c6b16c GIT binary patch literal 37032 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