Optimierung Schalter VS2008 Compiler Probleme



  • Hallo miteinander

    Habe hier komische Probleme im zusammenhang mit dem Compiler VS2008 und dem Full-Optimization optimierungs Schalter. Wenn ich nicht optimiere funktioniert alles einwandfrei! Wenn ich aber voll optimiere... optimiert er in meinen Augen manche Sachen einfach weg. Haber Probleme mit der Funktion _wremove() / _wrename / RemoveDirectory() / printf_s() .Die Daten können nicht gelöscht oder entfernt werden! Wie gesagt wenn ich nichts optimiere dann funktioniert alles so wie es soll, da sind auch keine Programmier Fehler oder was.


  • Mod

    Dann zeige uns mal Code....



  • Also es ist ein Daten Shredder Program... als Methode habe ich mal Gutmann dazugepack, die anderen sehen gleich aus bis auf die Methode.

    ...
    ...
    ...
    
    			wprintf_s(L"Nach dem Vorgang sind die Daten nicht mehr wiederherstellbar!\nWollen Sie die Daten wirklich überschreiben? (y/n):",szName);
    			scanf("%[n-y]c",&cny);
    			puts("");
    			if(cny == 'y') {
    
    				cls();
    
    				/* Init time */
    				start = clock();
    
    				/* Get file info attribut */
    				_wstat(szPath ,&attr1);
    
    				/* File */
    				if((attr1.st_mode & S_IFREG) || (attr1.st_mode & S_IFCHR)) {
    
    					/* Set file attribute */
    					SetFileAttributes(szPath ,FILE_ATTRIBUTE_NORMAL);
    
    					/* File delete routine */
    					FileDel(szPath, &modnr);
    
    					/* Print logfile */
    					PrintLog(L"log.dat");
    					wprintf(L"\n\nErase complete!\n");
    
    				/* Directory */
    				} else if(attr1.st_mode & S_IFDIR) {
    
    					/* Set file attribute */
    					SetFileAttributes(szPath ,FILE_ATTRIBUTE_NORMAL);
    
    					/* Recursiv directory delete routine */
    					RecDirecDel(szPath ,&modnr);
    
    					/* Remove main directory */
    					if( RemoveDirectory(szPath) == 0) {
    						wsprintf(&logbuf[0] ,L"\nVerzeichnis > \"%s\" konnte nicht entfernt werden.\n" ,szPath);
    						WriteLog(L"log.dat" ,logbuf);
    					}
    
    					/* Printf logfile */
    					PrintLog(L"log.dat");
    					wprintf(L"\n\nErase complete!\n");
    				}
    
    				end = clock();
    				printf_s("Time : %.2f Sec\n\n", (float)(end - start) / CLOCKS_PER_SEC);
    
    			}
    
    		} else {
    
    			/* Mod deepfs */
    			rc = modDEEPfs();
    			if(rc != 0) {
    				printf_s("\nFalsche Eingabe - return [PRESS ENTER]\n");
    				fflush(stdin);
    				getchar();
    			}
    		}
    
    		wprintf(L"Zurück zum Hauptmenü [PRESS ENTER]");
    		fflush(stdin);
    		getchar();
    
    	}
    
    	return 0;
    
    }
    
    int FileDel(wchar_t *name, int *modnrp)
    {
    
    	wchar_t logbuf[1000];
    	__int64 size = 0;
    	int rc = 0;
    	int fh = 0;
    	char statbuf[256];
    
    	memset(statbuf ,' ' ,256);
    	statbuf[255] = '\0';
    
    	fh = _wopen(&name[0], O_RDWR | O_BINARY);
    	if(fh == -1) {
    		wsprintf(&logbuf[0] ,L"\nDatei > \"%s\" kann nicht geöffnet werden...\n" ,name);
    		WriteLog(L"log.dat" ,logbuf);
    		return 1;
    	}
    
    	_lseeki64(fh, 0,SEEK_END);
    	size = _telli64(fh);
    	_lseeki64(fh, 0,SEEK_END);
    
    	_close(fh);
    
    	setCursor(4 ,0);
    	printf_s("%s",statbuf);
    	setCursor(4 ,0);
    	wprintf(L"File > \"%s\"\n",name);
    
    	if(*modnrp == 1) {
    		setCursor(1,0);
    		printf_s(">Gutmann Shredder Algorithmus");
    		rc = modGTM(name ,&size);
    	}
    
    	if(*modnrp == 2) {
    		setCursor(1,0);
    		printf_s(">BRUCE SCHNEIER Shredder Algorithmus");
    		rc = modBRS(name ,&size);
    	}
    
    	if(*modnrp == 3) {
    		setCursor(1,0);
    		printf_s(">Standard 5220.22-M des US-Verteidigungsministeriums");
    		rc = modUSSTD(name ,&size);
    	}
    
    	if(*modnrp == 4) {
    		setCursor(1,0);
    		printf_s(">LB Shreeder Algorithmus");
    		rc = modLB(name ,&size);
    	}
    
    	if(*modnrp == 5) {
    		setCursor(1,0);
    		printf_s(">Fast Methode");
    		rc = modFAST(name ,&size);
    	}
    
    	if( rc ) {
    		wsprintf(&logbuf[0] ,L"\nDatei > \"%s\" konnte nicht spezifisch überschriben oder gelöscht werden. - %lli Byte\n" ,name ,size);
    		WriteLog(L"log.dat" ,logbuf);
    		return 1;
    	}
    
    	return 0;
    }
    
    int RecDirecDel(wchar_t *name, int *modenrp)
    {
    
    	WIN32_FIND_DATA data;
    	HANDLE h = NULL;
    	struct _stat64i32 attr = {0};
    	wchar_t tmp[1000];
    	wchar_t tmp1[1000];
    	wchar_t logbuf[1000];
    
    	lstrcpy(&tmp1[0] ,&name[0]);
    	lstrcat(tmp1 ,L"\\*");
    
    	h = FindFirstFile(tmp1, &data);
    
    	do
    	{
    		if( !((! wcscmp(data.cFileName ,L".")) || (! wcscmp(data.cFileName ,L".."))) ) {
    
    			lstrcpy(&tmp[0] ,&name[0]);
    			lstrcat(tmp ,L"\\");				
    			lstrcat(tmp, data.cFileName);
    
    			_wstat(tmp, &attr);
    
    			if( attr.st_mode & S_IFDIR ) {
    
    				/* Set file attribute */
    				SetFileAttributes(tmp ,FILE_ATTRIBUTE_NORMAL);
    
    				/* Rekursive directory delete routine */
    				RecDirecDel(tmp, modenrp);
    
    				/* Directory delete */
    				if( RemoveDirectory(tmp) == 0) {
    					wsprintf(&logbuf[0] ,L"\nVerzeichnis > \"%s\" konnte nicht entfernt werden.\n" ,data.cFileName);
    					WriteLog(L"log.dat" ,logbuf);
    				}
    
    			}else if((attr.st_mode & S_IFREG) || (attr.st_mode & S_IFCHR)) {
    
    				/* Set file attribute */
    				SetFileAttributes(tmp ,FILE_ATTRIBUTE_NORMAL);
    
    				/* File delete */
    				FileDel(tmp, modenrp);
    			}
    
    		}
    
    	}
    	while( FindNextFile(h ,&data) );
    
    	FindClose(h);
    
    	return 0;
    
    }
    
    void ren_rem(wchar_t *name)
    {
    	wchar_t re_name[41];
    	int rc2 = 0 ,i = 0;
    
    	/* Build pseudo random name */
    	for(i=0; i < 40 ;i++) {
    
    		rc2 = rand()%122;
    		if( (rc2 <= 97) ) {
    			--i;
    		} else {
    			re_name[i] = (wchar_t)rc2;
    		}
    
    	}
    	re_name[i] = L'\0';
    
    	/* Rename */
    	_wrename(name ,re_name);
    
    	/* Remove file */
    	_wremove(re_name);
    
    }
    
    int modGTM(wchar_t *fname, __int64 *fsize)
    {
    	unsigned int i, x;
    	unsigned char ret_val = 0;
    	int fh = 0;
    	unsigned int res = 0;
    	__int64 blockcount = 0;
    	unsigned char PATTERNBLOCK[BSIZE];
    
    	fh = _wopen(&fname[0], O_WRONLY | O_BINARY);
    	if(fh == -1){
    		return 1;
    	}
    
    	blockcount = (__int64)(*fsize / BSIZE);
    		   res = (unsigned int)(*fsize % BSIZE);
    
    	for(x=0; x < GUTMANN; x++) {
    
    		setCursor(3 ,0);
    
    		_lseeki64(fh ,0 ,SEEK_SET);
    
    		/* Get random pattern */
    		ret_val = rand_pattern(x);
    		printf_s("Pattern: 0x%.2X : ",ret_val);
    		putBits(ret_val);
    		puts("");
    
    		/* Build pattern-block */
    		for(i=0;i<BSIZE;i++) {
    			PATTERNBLOCK[i] = ret_val;
    		}
    
    		for(i=0; i < blockcount ; i++) {
    			_write(fh ,PATTERNBLOCK ,BSIZE);
    		}
    
    		if(res) {
    			_write(fh ,PATTERNBLOCK ,res);
    		}
    
    	}
    
    	_close(fh);
    
    	/* Rename file */
    	ren_rem(fname);
    
    	return 0;
    }
    

Anmelden zum Antworten