CnCrypt便携版采用的驱动挂载和卸载方法,驱动启动之后直接添加删除标记,当驱动停止后,驱动就会自动卸载。
// Install and start driver service and mark it for removal (non-install mode)
int DriverLoad()
{
SC_HANDLE hManager = NULL, hService = NULL;
WCHAR szDriverPath[CC_LONG_PATH + 1];
BOOL bResult = FALSE;
DWORD dwStartType;
if (ReadLocalMachineRegistryDword(L"SYSTEM\\CurrentControlSet\\Services\\CnCrypt", L"Start", &dwStartType)
&& (dwStartType == SERVICE_SYSTEM_START || dwStartType == SERVICE_BOOT_START))
{
return ERR_PARAMETER_INCORRECT;
}
GetModPath(szDriverPath, ARRAYSIZE(szDriverPath));
wcscat(szDriverPath, !OSVersion::Is64BitOs() ? L"CnCrypt.sys" : L"CnCrypt-x64.sys");
if (!FileExists(szDriverPath))
{
Error("DRIVER_NOT_FOUND");
return ERR_DONT_REPORT;
}
hManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hManager == NUL