Проблема такая в общем
Есть пример на vc (из книжки нэббета - пример создания процесса - 6.2)
Пытаюсь откомпилить его в vc6....
Сообщения об ошибках....
Вот кусок кода
IO_STATUS_BLOCK iosb;
USER_STACK stack = {0};
OBJECT_ATTRIBUTES oa = {sizeof oa,0,name,OBJ_CASE_INSENSITIVE};
NtOpenFile(&hFile,FILE_EXECUTE | SYNCHRONIZE,&oa,&iosb,FILE_SHARE_READ,FILE_SYNCHRONOUS_IO_NONALERT);
oa.ObjectName = 0;
NtCreateSection(&hSection,SECTION_ALL_ACCESS,&oa,0,PAGE_EXECUTE,0x01000000,hFile);
NtClose(hFile);
NtCreateProcess(&hProcess,PROCESS_ALL_ACCESS,&oa,NtCurrentProcess(),TRUE,hSection,0,0);
SECTION_IMAGE_INFORMATION sii;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^вот это вот ЗДЕСЬ не нравится компилятору
NtQuerySection(hSection, SectionImageInformation,&sii,sizeof sii,0);
NtClose(hSection);
а далее компилящийся вариант того же самого,только sii раньше разместил
SECTION_IMAGE_INFORMATION sii;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^вот это вот в таком месте программы нормально компилится
IO_STATUS_BLOCK iosb;
USER_STACK stack = {0};
OBJECT_ATTRIBUTES oa = {sizeof oa,0,name,OBJ_CASE_INSENSITIVE};
NtOpenFile(&hFile,FILE_EXECUTE | SYNCHRONIZE,&oa,&iosb,FILE_SHARE_READ,FILE_SYNCHRONOUS_IO_NONALERT);
oa.ObjectName = 0;
NtCreateSection(&hSection,SECTION_ALL_ACCESS,&oa,0,PAGE_EXECUTE,0x01000000,hFile);
NtClose(hFile);
NtCreateProcess(&hProcess,PROCESS_ALL_ACCESS,&oa,NtCurrentProcess(),TRUE,hSection,0,0);
NtQuerySection(hSection, SectionImageInformation,&sii,sizeof sii,0);
NtClose(hSection);
Так вот собсна вопрос - почему приходится описание переменных вначале проги делать - иначе они не понимаются при компиляции....
Пример собирал в ддк 2000 - Free Build Environment и далее в нужном каталоге запускал nmake
Искодник C++, а ты компилируешь его как C06.03.03 16:08 Автор: leo <Леонид Юрьев> Статус: Elderman
> Что означает запись: > > stack.ExpandableStackBase=PCHAR(stack.ExpandableStackBottom > )+x; > ^^^^^как > это понять? > Что такое PCHAR ? Разве так можно тип использовать ? Приведение типа в С++-стиле. В C++ приведение даже к примитивным типам (не классам) можно записывать а-ля конструирование объекта. Правда, запись char *(stack.ExpandableStackBottom), увы, не работает - нужно пользоваться typedef.