CreateFile - Share Access



  • Hi,

    nachdem ich eine Datei mittels

    HANDLE hfile = CreateFile(path, FILE_READ_DATA | FILE_EXECUTE, 0x00, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    

    mit EXCLUSIVE-Rechten geöffnet habe (3. Parameter 0x00), sollte die Datei von keinem anderen Prozess zum Lesen oder Schreiben geöffnet werden können:

    msdn:

    0x00000000

    Prevents other processes from opening a file or device if they request delete, read, or write access.

    Jedoch kann ich von einem anderen Prozess mittels:

    file = CreateFile(path, FILE_READ_DATA, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    

    trotzdem lesend zugreifen.


  • Mod

    Im ersten CreateFIle kannst Du FILE_EXECUTE mal weglassen...
    Bist Du sicher, dass die Datei noch offen ist?



  • FILE_EXECUTE is für was anderes drin ;).

    Das Handle schließ ich definitiv noch nicht (warte auf user input bevor das handle geschlossen wird)


  • Mod

    Und was soll FILE_EXECUTE hier für einen Sinn machen?

    Selbst wenn Du davon Teile später in den Speicher lädst und ausführst.



  • Ok ich hab FILE_EXECUTE raus, ich kann trotzdem lesend auf die Datei zugreifen.
    Solang ich nicht CloseHandle() auf das Filehandle gerufen habe, sollten andere Prozesse eigtl. am Lesen der Datei gehindert werden oder?


  • Mod

    Keine Ahnung was Du machst. Das geht nicht...

    Du hast absolute Pfade genommen 😉 nicht dass Du Dich hier um mehrere Dateien drehst... oder evtl. durch die Virtualisierung heringelegt wirst...



  • das programm das exclusive rechte will:

    HANDLE file = CreateFile(L"C:\\Windows\\System32\\notepad.exe", FILE_READ_DATA, 0x00, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    	int a = 0;
    	if(file == INVALID_HANDLE_VALUE){
    		printf("could not open file\n");
    		return 1;
    	}
    	printf("stop waiting... press key\n");
    	getchar();
    	CloseHandle(file);
    	return 0;
    

    das programm, dass gestartet wird bevor user input in dem obigen programm kommt

    HANDLE file = CreateFile(L"C:\\Windows\\System32\\notepad.exe", FILE_READ_DATA, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    	if(file == INVALID_HANDLE_VALUE){
    		printf("could not open file\n");
    		goto end;
    		return 1;
    	}
    	printf("file opened\n");
    	byte buff[3];
    	DWORD readbytes;
    	bool ret = ReadFile(file, buff, 2, &readbytes, NULL);
    	buff[2] = '\0';
    	if(ret){
    		printf("%s\n", (char*)&buff);
    
    	}
    
    	end:
    	system("PAUSE");
    	return 0;
    


  • denk dir die return 1; oben weg 🙂


  • Mod

    Und beide Programme sind 32bit bzw. 64bit? D.h. von selben Typ?



  • ja selbes os, selbes visual studio, selbe plattform


Anmelden zum Antworten