递归删除FOLDER和注册表KEY(纯C语言WIN32API单函数无注释版)
删文件夹:void DeleteFolder(char *szFilePath)
{
WIN32_FIND_DATAA fd;
char szSearch={0};
strcpy(szSearch,szFilePath);
strcat(szSearch,"*.*");
HANDLE h=FindFirstFileA(szSearch,&fd);
if(h!=INVALID_HANDLE_VALUE)
{
BOOL bRet=TRUE;
while(bRet)
{
bRet=FindNextFileA(h,&fd);
if(stricmp(fd.cFileName,".."))
{
char tmp={0};
strcpy(tmp,szFilePath);
strcat(tmp,fd.cFileName);
if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
strcat(tmp,"\\");
//printf("%s\n",tmp);
DeleteFolder(tmp);
RemoveDirectoryA(tmp);
}
else
{
//printf("%s\n",tmp);
DeleteFileA(tmp);
}
}
}
FindClose(h);
}
RemoveDirectoryA(szFilePath);
}
删注册表键:
VOID RegDeleteKeys(HKEY RootKey, const char *pSubKey)
{
HKEY hKey;
DWORD nRet,NameCnt,NameMaxLen,KeyCnt,KeyMaxLen,MaxDateLen;
nRet=RegOpenKeyExA(RootKey,pSubKey,0,KEY_ALL_ACCESS,&hKey);
if(nRet!=ERROR_SUCCESS)
{
return;
}
nRet = RegQueryInfoKey(hKey,NULL,NULL,NULL,&KeyCnt,&KeyMaxLen,NULL,&NameCnt,&NameMaxLen,&MaxDateLen,NULL,NULL);
if(nRet == ERROR_SUCCESS)
{
for(int dwIndex = KeyCnt - 1; dwIndex >= 0; dwIndex--)
{
char sKeyName = {0}, pSubKeyTemp = {0};
RegEnumKeyA(hKey, dwIndex, sKeyName, sizeof(sKeyName));
HKEY hKeySub;
DWORD KeyCntSub;
strcpy(pSubKeyTemp, pSubKey);
strcat(pSubKeyTemp, "\\");
strcat(pSubKeyTemp, sKeyName);
nRet = RegOpenKeyExA(RootKey,pSubKeyTemp,0,KEY_ALL_ACCESS,&hKeySub);
if(nRet == ERROR_SUCCESS)
{
nRet = RegQueryInfoKey(hKeySub,NULL,NULL,NULL,&KeyCntSub,&KeyMaxLen,NULL,&NameCnt,&NameMaxLen,&MaxDateLen,NULL,NULL);
if(nRet == ERROR_SUCCESS)
{
if (KeyCntSub != 0)
{
RegDeleteKeys(RootKey, pSubKeyTemp);
}
RegCloseKey(hKeySub);
}
}
RegDeleteKeyA(RootKey ,pSubKeyTemp);
}
RegCloseKey(hKey);
}
RegDeleteKeyA(RootKey ,pSubKey);
}
例子:
DeleteFolder("c:\\windows\\");
RegDeleteKeys(HKEY_LOCAL_MACHINE,"SYSTEM\\ControlSet001\\services"); 谢谢分享 {:soso_e195:} 谢谢
页:
[1]