백업 및 복구 도구를 작성하려고합니다. WinPE CD (http://en.wikipedia.org/wiki/Windows_Preinstallation_Environment)에서 코드를 실행하고 있습니다. 전체 C : 파티션을 읽고 네트워크에 쓰려고합니다. tar 명령과 같지만 특정 창은 다릅니다. 파일 소유자를 설정하는 것 외에는 모든 것이 작동합니다. Windows는 알려지지 않은 SID가 소유 한 파일에 대해 정말로 용납하지 않는 것 같습니다. WinPE에서 실행 중이므로 C :에 정의 된 대부분의 사용자는 로컬 사용자 데이터베이스에 없습니다.파일 소유자를 Windows에 존재하지 않는 사용자/SID로 설정하십시오.
- SetFileSecurity (반환 1307)
- SetSecurityInfo (반환 1307)
- SetNamedSecurityInfo가 (반환 1307)
- BackupWrite (반환 1307) : 여기 내가 해봤 기능 중 일부입니다
- NtSetSecurityObject (0xC000005A 반환)
나는 이것이 행해질다는 것을 알고있다. SetACL (http://helgeklein.com/setacl/) 할 수 있습니다.
그래서, 질문입니다. 파일의 소유자를 존재하지 않는 사용자/SID로 설정하려면 어떻게해야합니까? 어떤 도움이라도 대단히 감사합니다!
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <sddl.h>
#include <aclapi.h>
#include <tchar.h>
INT _tmain(){
PSECURITY_DESCRIPTOR psdOwner = LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_LENGTH);
if (InitializeSecurityDescriptor(psdOwner,SECURITY_DESCRIPTOR_REVISION)){
PSID psOwner = (PSID)0;
if (ConvertStringSidToSid(TEXT("S-1-5-21-3626571138-2175758104-1447827851-1013"),&psOwner)){
if (SetSecurityDescriptorOwner(psdOwner,psOwner,FALSE)){
DWORD dwError = SetNamedSecurityInfo(TEXT("test.txt"),SE_FILE_OBJECT,OWNER_SECURITY_INFORMATION,psdOwner,NULL,NULL,NULL);
if (dwError == ERROR_SUCCESS){
_tprintf(TEXT("Success!\n"));
}else{
_tprintf(TEXT("Failed to set owner: %u\n"),dwError);
}
}else{
_tprintf(TEXT("Failed to set owner into SD: %u\n"),GetLastError());
}
}else{
_tprintf(TEXT("Failed to covnert Sid string to Sid: %u\n"),GetLastError());
}
if (psOwner) LocalFree(psOwner);
}else{
_tprintf(TEXT("Failed to initialize SD: %u\n"),GetLastError());
}
if (psdOwner) LocalFree(psdOwner);
return 0;
}