modrih:
Witam! Czy zna ktoś z Was może sposób na wykonywanie poleceń MS DOS, przy starcie Windows Vista, ale jeszcze przed załadowaniem wszystkich plików, chodzi mi o to aby móc np. podmienić plik shell32.dll, w grę nie wchodzi konsola systemowa, gdyż chcę zaprogramować program, który musi niestety podmienić kilka plików w Windowsie. Autoexec.bat chyba na niewiele się zda…, w Viście …, a może jest jakieś polecenie, dzięki któremu można podmienić używane pliki…,? Za ewentualne odpowiedzi serdecznie dziękuję!
[gdyż chcę zaprogramować program,] - ehehehehee :lol: :lol: :lol:
Nie ma żadnej możliwości wykonywania poleceń (jak to nazywasz) dosa przy starcie Visty - nie ma dosa w tym systemie
Z “zaprogramowaniem programu” do podmiany plików systemowych będzie trudniej:
Zastosowanie:
TakeOwnership("nazwa_pliku.xxx")
po czym możesz za pomocą wywołań: RenameFile(“plik.org ”,“plikkopia.org ”); // zminiasz nazwe oryginalnego i CopyFileA(“source”,“destin…”); // kopiujesz docelowo Tu masz kod w C++ 3 funckji. 2 pierwsze potrzebne są trzeciej która służy do przejęcia pliku na własność z poziomu kodu:
#include
#include
BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if(!LookupPrivilegeValue(NULL,lpszPrivilege, luid))
{
return FALSE;
}
else
{
//error
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if(bEnablePrivilege)
{
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
}
else
{
tp.Privileges[0].Attributes = 0;
}
if(!AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL))
{
return FALSE;
}
else
{
//error
}
return TRUE;
}
BOOL CreateMyACL(SECURITY_ATTRIBUTES * pSA)
{
TCHAR * szSD = TEXT("D:") // DACL
TEXT("(D;OICI;GRLOFR;;;AN)")
TEXT("(A;;RPWPCCDCLCRCWOWDSDSW;;;SY)")
TEXT("(A;OICI;GACCFA;;;LA)")
TEXT("(A;OICI;GACCFA;;;S-1-5-11)")
TEXT("S:") // SACL
TEXT("(OU;SAFA;RPWPCCDCLCRCWOWDSDSW;;;S-1-5-18)")
TEXT("(OU;SAFA;GACCFA;;;AU)")
TEXT("(OU;SAFA;GAWPFW;;;LA)");
if(pSA == NULL) return FALSE;
return ConvertStringSecurityDescriptorToSecurityDescriptor(
szSD,
SDDL_REVISION_1,
(pSA-lpSecurityDescriptor),
NULL);
}
BOOL TakeOwnership(LPTSTR lpszOwnFile)
{
BOOL bRetval = FALSE;
HANDLE hToken = NULL;
PSID pSIDAdmin = NULL;
PSID pSIDEveryone = NULL;
PACL pACL = NULL;
SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;
const int NUM_ACES = 2;
EXPLICIT_ACCESS ea[NUM_ACES];
DWORD dwRes;
if (!AllocateAndInitializeSid(SIDAuthWorld, 1,
SECURITY_WORLD_RID,
0,
0, 0, 0, 0, 0, 0,
pSIDEveryone))
{
printf("AllocateAndInitializeSid (Everyone) error %u\n", GetLastError());
goto Cleanup;
}
if (!AllocateAndInitializeSid(SIDAuthNT, 2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
pSIDAdmin))
{
printf("AllocateAndInitializeSid (Admin) error %u\n", GetLastError());
goto Cleanup;
}
ZeroMemory(ea, NUM_ACES * sizeof(EXPLICIT_ACCESS));
ea[0].grfAccessPermissions = GENERIC_READ;
ea[0].grfAccessMode = SET_ACCESS;
ea[0].grfInheritance = NO_INHERITANCE;
ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
ea[0].Trustee.ptstrName = (LPTSTR) pSIDEveryone;
ea[1].grfAccessPermissions = GENERIC_ALL;
ea[1].grfAccessMode = SET_ACCESS;
ea[1].grfInheritance = NO_INHERITANCE;
ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID;
ea[1].Trustee.TrusteeType = TRUSTEE_IS_GROUP;
ea[1].Trustee.ptstrName = (LPTSTR) pSIDAdmin;
if (ERROR_SUCCESS != SetEntriesInAcl(NUM_ACES,
ea,
NULL,
pACL))
{
printf("Failed SetEntriesInAcl\n");
goto Cleanup;
}
dwRes = SetNamedSecurityInfo(
lpszOwnFile,
SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
NULL, NULL,
pACL,
NULL);
if (ERROR_SUCCESS == dwRes)
{
printf("Successfully changed DACL\n");
bRetval = TRUE;
// No more processing needed.
goto Cleanup;
}
if (dwRes != ERROR_ACCESS_DENIED)
{
printf("First SetNamedSecurityInfo call failed: %u\n", dwRes);
goto Cleanup;
}
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES,
hToken))
{
printf("OpenProcessToken failed: %u\n", GetLastError());
goto Cleanup;
}
if (!SetPrivilege(hToken, SE_TAKE_OWNERSHIP_NAME, TRUE))
{
printf("You must be logged on as Administrator.\n");
goto Cleanup;
}
dwRes = SetNamedSecurityInfo(
lpszOwnFile,
SE_FILE_OBJECT,
OWNER_SECURITY_INFORMATION,
pSIDAdmin,
NULL,
NULL,
NULL);
if (dwRes != ERROR_SUCCESS)
{
printf("Could not set owner. Error: %u\n", dwRes);
goto Cleanup;
}
if (!SetPrivilege(hToken, SE_TAKE_OWNERSHIP_NAME, FALSE))
{
printf("Failed SetPrivilege call unexpectedly.\n");
goto Cleanup;
}
dwRes = SetNamedSecurityInfo(
lpszOwnFile,
SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
NULL, NULL,
pACL,
NULL);
if (dwRes == ERROR_SUCCESS)
{
printf("Successfully changed DACL\n");
bRetval = TRUE;
}
else
{
printf("Second SetNamedSecurityInfo call failed: %u\n", dwRes);
}
Cleanup:
if (pSIDAdmin)
FreeSid(pSIDAdmin);
if (pSIDEveryone)
FreeSid(pSIDEveryone);
if (pACL)
LocalFree(pACL);
if (hToken)
CloseHandle(hToken);
return bRetval;
}