Обход ограничений Fat32/ntfs (си)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DaemoniZ, 3 May 2008.

  1. DaemoniZ

    DaemoniZ Member

    Joined:
    8 Jan 2006
    Messages:
    45
    Likes Received:
    9
    Reputations:
    6
    В хорошо изветном нам глянцевом жюрнале за февраль 2004 года (#062) была статья на эту тему. В ней был преведен код по сабжу

    PHP:
    #include <windows.h>

    void main()

    {

    char *old "C:\\TMP\\somefile.txt";

    char *_new "C:\\TMP\\twodots..";

    //переменные для нового и старого имени файла

    char *newname;

    wsprintf(newname,"%s.\\",_new);

    //добавляем символы «.\» в новое имя файла

    MoveFile(oldnewname);

    //переименовываем файл

    }
    Не могу скомпилировать. VC6 ругается:



    С другим способом тоже проблема:

    PHP:
    #include <windows.h>

    #include <iostream.h>

    void CreateStrangeFile(char *filename)

    {

    char *curdir//текущая папка

    char *uncpath//полный путь до файла в формате UNC

    GetCurrentDirectory(MAX_PATH,curdir); //получаем текущий каталог

    wsprintf(uncpath,"\\\\?\\%s\\%s",curdirfilename); //формируем UNC-путь

    HANDLE hFile CreateFileuncpathGENERIC_WRITEFILE_SHARE_WRITENULL,

    CREATE_ALWAYSNULLNULL);

    //создаем новый файл

    DWORD ret;

    __try {

    WriteFile(hFile,"This is a super secret info",28,&retNULL);

    //записываем секретную инфу

    }

    __finally {

    CloseHandle(hFile);

    //закрываем файл

    }

    }

    void main()

    {

    CreateStrangeFile("prn");

    //создаем файл «prn»

    }


    Как исправить?


    Оригинал статьи
     
  2. arpm

    arpm New Member

    Joined:
    6 Apr 2008
    Messages:
    8
    Likes Received:
    4
    Reputations:
    4
    Наиболее вероятная пролема - линкер думает, что собирает не консольное приложение, а вин32 приложение, и поэтому ищет entrypoint WinMain()
     
    1 person likes this.
  3. DaemoniZ

    DaemoniZ Member

    Joined:
    8 Jan 2006
    Messages:
    45
    Likes Received:
    9
    Reputations:
    6
    Собираю точно консольное приложение. Побовал кстати компилировать с помошью C++Builder 2007. Тоже не получается.
     
  4. criz

    criz Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    +1.
    Вот, что говорит микрософт:
    http://support.microsoft.com/default.aspx?scid=kb;EN-US;125750
     
    1 person likes this.
  5. DaemoniZ

    DaemoniZ Member

    Joined:
    8 Jan 2006
    Messages:
    45
    Likes Received:
    9
    Reputations:
    6
    Блин. Извиняюсь. Действительно. Вы правы.
     
  6. criz

    criz Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    А зачем нужно вот это:
    Code:
    char *newname; 
    
    wsprintf(newname,"%s.\\",_new);
    
    ?
    можно же другим способом "склеить строки"
     
  7. DaemoniZ

    DaemoniZ Member

    Joined:
    8 Jan 2006
    Messages:
    45
    Likes Received:
    9
    Reputations:
    6
    Может только с помошью wsprintf можно задать неправильное имя?

    Появилась другая проблема. Программа падает при запуске.
     
  8. criz

    criz Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Попробуй использовать:
    Code:
    wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );
     
  9. DaemoniZ

    DaemoniZ Member

    Joined:
    8 Jan 2006
    Messages:
    45
    Likes Received:
    9
    Reputations:
    6
    эээммм.... пожно поподробнее, как?