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.
-
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; }