Всегда ошибка об отказе в доступу.. Можно как нибудь усмирить vista? Код (Text): #include <windows.h> #include <stdio.h> int main (void) { FILE * pFile=NULL; pFile = fopen ("C:\\windows\\notepad.exe","r+b"); if (pFile!=NULL) { MessageBox(0,L"File opened succesfull",L"Mess",MB_OK); fclose (pFile); } }
Код (Text): #include <windows.h> #include <stdio.h> #include "ntdll.h" int main (void) { IMAGE_DOS_HEADER *mz_head; IMAGE_FILE_HEADER *pe_head; IMAGE_OPTIONAL_HEADER *pe_opt_head; IMAGE_SECTION_HEADER *sect; FILE * pFile=NULL; HANDLE hToken=NULL; PTOKEN_USER ptuUser=NULL; DWORD dwSize=NULL; SECURITY_DESCRIPTOR sdSID; PCHAR path="C:\\windows\\notepad.exe"; int bWasEnabled; RtlAdjustPrivilege(SE_TAKE_OWNERSHIP_PRIVILEGE,TRUE,FALSE,(PBOOLEAN)&bWasEnabled); OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken); ptuUser=(PTOKEN_USER)malloc(0x200); RtlZeroMemory (ptuUser,0x200); if (!ptuUser) MessageBox (0,L"345",L"345",MB_OK); GetTokenInformation(hToken,(TOKEN_INFORMATION_CLASS)1,ptuUser,0x200,&dwSize); sdSID.Revision=SECURITY_DESCRIPTOR_REVISION; sdSID.Owner=ptuUser->User.Sid; SetFileSecurity((LPCWSTR)path,OWNER_SECURITY_INFORMATION,&sdSID); SetFileSecurity((LPCWSTR)path,DACL_SECURITY_INFORMATION,&sdSID); CloseHandle(hToken); pFile = fopen ((char*)path,"r+"); if (pFile!=NULL) { MessageBox(0,L"File opened succesfull",L"Mess",MB_OK); fclose (pFile); } } В чём косяк? @err,hr говорит файл не найден... хотя fopen открывает его...
проблема с долбаным юникодом... Код (Text): #include <windows.h> #include <stdio.h> #include "ntdll.h" int main (void) { IMAGE_DOS_HEADER *mz_head; IMAGE_FILE_HEADER *pe_head; IMAGE_OPTIONAL_HEADER *pe_opt_head; IMAGE_SECTION_HEADER *sect; FILE * pFile=NULL; HANDLE hToken=NULL; PTOKEN_USER ptuUser=NULL; DWORD dwSize=NULL; SECURITY_DESCRIPTOR sdSID; PWCHAR path=L"C:\\windows\\regedit.exe"; PCHAR ppath="C:\\windows\\regedit.exe"; int bWasEnabled; RtlAdjustPrivilege(SE_TAKE_OWNERSHIP_PRIVILEGE,TRUE,FALSE,(PBOOLEAN)&bWasEnabled); OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken); ptuUser=(PTOKEN_USER)malloc(0x200); GetTokenInformation(hToken,(TOKEN_INFORMATION_CLASS)1,ptuUser,0x200,&dwSize); InitializeSecurityDescriptor (&sdSID,SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorOwner (&sdSID,ptuUser->User.Sid,false); SetFileSecurity((LPCWSTR)path,OWNER_SECURITY_INFORMATION,&sdSID); SetFileSecurity((LPCWSTR)path,DACL_SECURITY_INFORMATION,&sdSID); CloseHandle(hToken); pFile = fopen (ppath,"r"); if (pFile!=NULL) { MessageBox(0,L"File opened succesfull",L"Mess",MB_OK); fclose (pFile); } } так всё работает..как конвертировать эти строки между собой? Чем Unicode отличается от Wide Char?