system files write access

Тема в разделе "WASM.WIN32", создана пользователем punxer, 14 янв 2009.

  1. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Всегда ошибка об отказе в доступу.. Можно как нибудь усмирить vista?

    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3.  
    4. int main (void)
    5. {
    6.     FILE * pFile=NULL;
    7.     pFile = fopen ("C:\\windows\\notepad.exe","r+b");
    8.     if (pFile!=NULL)
    9.     {
    10.         MessageBox(0,L"File opened succesfull",L"Mess",MB_OK);
    11.         fclose (pFile);
    12.     }
    13.  
    14. }
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Попробуй с правами администратора.
     
  3. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    не катит что -то...
     
  4. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    проблему решил утилой takecontrol. Вопрос следом, как она работает??
     
  5. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    на васме гдето статейка была про отключение виндоус файл протекшна
     
  6. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include "ntdll.h"
    4. int main (void)
    5. {
    6.     IMAGE_DOS_HEADER *mz_head;
    7.     IMAGE_FILE_HEADER *pe_head;
    8.     IMAGE_OPTIONAL_HEADER *pe_opt_head;
    9.     IMAGE_SECTION_HEADER *sect;
    10.     FILE * pFile=NULL;
    11.     HANDLE hToken=NULL;
    12.     PTOKEN_USER ptuUser=NULL;
    13.     DWORD dwSize=NULL;
    14.     SECURITY_DESCRIPTOR sdSID;
    15.     PCHAR path="C:\\windows\\notepad.exe";
    16.     int bWasEnabled;
    17.  
    18.     RtlAdjustPrivilege(SE_TAKE_OWNERSHIP_PRIVILEGE,TRUE,FALSE,(PBOOLEAN)&bWasEnabled);
    19.     OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken);
    20.     ptuUser=(PTOKEN_USER)malloc(0x200);
    21.     RtlZeroMemory (ptuUser,0x200);
    22.     if (!ptuUser) MessageBox (0,L"345",L"345",MB_OK);
    23.     GetTokenInformation(hToken,(TOKEN_INFORMATION_CLASS)1,ptuUser,0x200,&dwSize);
    24.    
    25.     sdSID.Revision=SECURITY_DESCRIPTOR_REVISION;
    26.     sdSID.Owner=ptuUser->User.Sid;
    27.    
    28.     SetFileSecurity((LPCWSTR)path,OWNER_SECURITY_INFORMATION,&sdSID);
    29.     SetFileSecurity((LPCWSTR)path,DACL_SECURITY_INFORMATION,&sdSID);
    30.     CloseHandle(hToken);
    31.  
    32.     pFile = fopen ((char*)path,"r+");
    33.     if (pFile!=NULL)
    34.     {
    35.         MessageBox(0,L"File opened succesfull",L"Mess",MB_OK);
    36.         fclose (pFile);
    37.     }
    38.  
    39. }
    В чём косяк?
    @err,hr говорит файл не найден... хотя fopen открывает его...
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    CreateFile не пробовал?
     
  8. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    проблема с долбаным юникодом...
    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include "ntdll.h"
    4. int main (void)
    5. {
    6.     IMAGE_DOS_HEADER *mz_head;
    7.     IMAGE_FILE_HEADER *pe_head;
    8.     IMAGE_OPTIONAL_HEADER *pe_opt_head;
    9.     IMAGE_SECTION_HEADER *sect;
    10.     FILE * pFile=NULL;
    11.     HANDLE hToken=NULL;
    12.     PTOKEN_USER ptuUser=NULL;
    13.     DWORD dwSize=NULL;
    14.     SECURITY_DESCRIPTOR sdSID;
    15.     PWCHAR path=L"C:\\windows\\regedit.exe";
    16.     PCHAR ppath="C:\\windows\\regedit.exe";
    17.     int bWasEnabled;
    18.  
    19.     RtlAdjustPrivilege(SE_TAKE_OWNERSHIP_PRIVILEGE,TRUE,FALSE,(PBOOLEAN)&bWasEnabled);
    20.     OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken);
    21.     ptuUser=(PTOKEN_USER)malloc(0x200);
    22.  
    23.     GetTokenInformation(hToken,(TOKEN_INFORMATION_CLASS)1,ptuUser,0x200,&dwSize);
    24.  
    25.     InitializeSecurityDescriptor (&sdSID,SECURITY_DESCRIPTOR_REVISION);
    26.     SetSecurityDescriptorOwner (&sdSID,ptuUser->User.Sid,false);
    27.    
    28.     SetFileSecurity((LPCWSTR)path,OWNER_SECURITY_INFORMATION,&sdSID);
    29.     SetFileSecurity((LPCWSTR)path,DACL_SECURITY_INFORMATION,&sdSID);
    30.     CloseHandle(hToken);
    31.  
    32.     pFile = fopen (ppath,"r");
    33.     if (pFile!=NULL)
    34.     {
    35.         MessageBox(0,L"File opened succesfull",L"Mess",MB_OK);
    36.         fclose (pFile);
    37.     }
    38.  
    39. }
    так всё работает..как конвертировать эти строки между собой? Чем Unicode отличается от Wide Char?
     
  9. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    CreateFile вариант, сейчас уже понимаю...суть уже в спортивном интересе...=)