在SYSTEM服务帐户中的CreateFile / Close句柄后,DeleteFile失败

时间:2016-05-31 19:49:46

标签: c++ security service file-access

我编写了一个正在加载到作为本地系统运行的服务进程的DLL。我不应该删除我创建的文件吗?

HANDLE hFile = CreateFileW(m_achTempFilePath, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ;

成功。 然后我运行CloseHandle(hFile)

DeleteFile(m_achTempFilePath)

删除文件失败并拒绝访问。

我执行了以下操作并将&sa作为安全属性传递给CreateFile,然后DeleteFile成功。但这让每个人都完全掌控。我不希望这样。

这样做的正确方法是什么?

CDacl dacl;
dacl.AddAllowedAce(Sids::World(), SPECIFIC_RIGHTS_ALL | STANDARD_RIGHTS_ALL) ;
CSecurityDesc sd;
sd.SetDacl(dacl);
CSecurityAttributes sa;
sa.Set(sd, true);

1 个答案:

答案 0 :(得分:0)

您始终可以在创建文件方法中使用标记FILE_FLAG_DELETE_ON_CLOSE。这样当你关闭文件的句柄时它会自行清理。该问题本身可能是Windows的基于时间的核心问题。

这项工作应解决问题。