Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Обход ограничений Fat32/ntfs (си) (https://forum.antichat.xyz/showthread.php?t=69179)

DaemoniZ 03.05.2008 12:50

Обход ограничений Fat32/ntfs (си)
 
В хорошо изветном нам глянцевом жюрнале за февраль 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 ругается:

Цитата:

--------------------Configuration: tryfatntfs - Win32 Debug--------------------
Compiling...
main.cpp C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\tryfatntfs\main.cpp(15) : warning C4700: local variable 'newname' used without having been initialized
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/tryfatntfs.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
tryfatntfs.exe - 2 error(s), 1 warning(s)


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

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»



Цитата:

--------------------Configuration: tryfatntfs - Win32 Debug--------------------
Compiling...
main.cpp
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\tryfatntfs\main.cpp(13) : warning C4700: local variable 'curdir' used without having been initialized
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\tryfatntfs\main.cpp(15) : warning C4700: local variable 'uncpath' used without having been initialized
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/tryfatntfs.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

tryfatntfs.exe - 2 error(s), 2 warning(s)


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


Оригинал статьи

arpm 03.05.2008 13:19

Наиболее вероятная пролема - линкер думает, что собирает не консольное приложение, а вин32 приложение, и поэтому ищет entrypoint WinMain()

DaemoniZ 03.05.2008 13:21

Собираю точно консольное приложение. Побовал кстати компилировать с помошью C++Builder 2007. Тоже не получается.

criz 03.05.2008 13:26

Цитата:

Сообщение от arpm
Наиболее вероятная пролема - линкер думает, что собирает не консольное приложение, а вин32 приложение, и поэтому ищет entrypoint WinMain()

+1.
Вот, что говорит микрософт:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;125750

DaemoniZ 03.05.2008 13:26

Блин. Извиняюсь. Действительно. Вы правы.

criz 03.05.2008 14:00

А зачем нужно вот это:
Код:

char *newname;

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

?
можно же другим способом "склеить строки"

DaemoniZ 03.05.2008 14:04

Может только с помошью wsprintf можно задать неправильное имя?

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

criz 03.05.2008 15:07

Попробуй использовать:
Код:

wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );

DaemoniZ 03.05.2008 19:47

эээммм.... пожно поподробнее, как?


Время: 12:09