Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2013, 03:14   #1
Student_2009
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 16
По умолчанию Ошибка при компиляции

Доброго времени суток!

При компиляции программы (через командную строку) возникают ошибки

c:\Users\Вит\main.cpp:22:19: ошибка: ISO C++ запрещает декларации <NTSTATUS> без типа [-fpermissive]
c:\Users\Вит\main.cpp:22:19: ошибка: typedef <NTSTATUS> is initialized (use decltype instead)
c:\Users\Вит\main.cpp:22:19: ошибка: expected primary-expression before <__attribute__>
c:\Users\Вит\main.cpp:29:19: ошибка: ISO C++ запрещает декларации <NTSTATUS> без типа [-fpermissive]
c:\Users\Вит\main.cpp:29:19: ошибка: typedef <NTSTATUS> is initialized (use decltype instead)
c:\Users\Вит\main.cpp:29:19: ошибка: expected primary-expression before <__attribute__>
c:\Users\Вит\main.cpp:37:19: ошибка: ISO C++ запрещает декларации <NTSTATUS> без типа [-fpermissive]
c:\Users\Вит\main.cpp:37:19: ошибка: typedef <NTSTATUS> is initialized (use decltype instead)
c:\Users\Вит\main.cpp:37:19: ошибка: expected primary-expression before <__attribute__>
c:\Users\Вит\main.cpp: В функции <int main()>:
c:\Users\Вит\main.cpp:124:2: ошибка: нет декларации <NTSTATUS> в этой области видимости
c:\Users\Вит\main.cpp:124:11: ошибка: expected <;> before <status>
c:\Users\Вит\main.cpp:126:2: ошибка: нет декларации <_NtQuerySystemInformation> в этой области видимости
c:\Users\Вит\main.cpp:126:28: ошибка: expected <;> before <NtQuerySystemInformation>
c:\Users\Вит\main.cpp:127:2: ошибка: нет декларации <_NtQueryObject> в этой области видимости
c:\Users\Вит\main.cpp:127:17: ошибка: expected <;> before <NtQueryObject>
c:\Users\Вит\main.cpp:128:2: ошибка: нет декларации <_NtDuplicateObject> в этой области видимости
c:\Users\Вит\main.cpp:128:21: ошибка: expected <;> before <NtDuplicateObject>
c:\Users\Вит\main.cpp:183:10: ошибка: нет декларации <status> в этой области видимости
c:\Users\Вит\main.cpp:189:9: ошибка: нет декларации <NtQuerySystemInformation> в этой области видимости
c:\Users\Вит\main.cpp:216:37: предупреждение: приведение к типу указателя от целого другого размера [-Wint-to-pointer-cast]
c:\Users\Вит\main.cpp:218:5: ошибка: нет декларации <status> в этой области видимости
c:\Users\Вит\main.cpp:218:122: ошибка: нет декларации <NtQueryObject> в этой области видимости

При работе через VS2010 все нормально.

С чем это может быть связано?
Student_2009 вне форума Ответить с цитированием
Старый 19.03.2013, 04:15   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
При компиляции программы (через командную строку)
Компилятор какой? Похоже на вывод гцц... Как исправить, там вам же подсказали опции.

Цитата:
С чем это может быть связано?
С небольшими различиями в директивах, синтаксисе, праметрах компиляторов...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 19.03.2013, 20:16   #3
Student_2009
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 16
По умолчанию

Компилятор - MinGW.

Последний раз редактировалось Student_2009; 19.03.2013 в 20:19.
Student_2009 вне форума Ответить с цитированием
Старый 19.03.2013, 20:17   #4
Student_2009
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 16
По умолчанию

Компилятор - MinGW.
Student_2009 вне форума Ответить с цитированием
Старый 19.03.2013, 20:28   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Выложите код, посмотрим....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 20.03.2013, 00:14   #6
Student_2009
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 16
По умолчанию

Код:
#ifndef UNICODE
#define UNICODE
#endif

#define SystemHandleInformation 16
#define ObjectNameInformation 1
#define ObjectTypeInformation 2
#define STATUS_INFO_LENGTH_MISMATCH 0xc0000004

#include <stdio.h>
#include <string.h>
#include <windows.h>


typedef NTSTATUS (NTAPI *_NtQuerySystemInformation)(
    ULONG SystemInformationClass,
    PVOID SystemInformation,
    ULONG SystemInformationLength,
    PULONG ReturnLength
    );

typedef NTSTATUS (NTAPI *_NtQueryObject)(
    HANDLE ObjectHandle,
    ULONG ObjectInformationClass,
    PVOID ObjectInformation,
    ULONG ObjectInformationLength,
    PULONG ReturnLength
    );

typedef NTSTATUS (NTAPI *_NtDuplicateObject)(
    HANDLE SourceProcessHandle,
    HANDLE SourceHandle,
    HANDLE TargetProcessHandle,
    PHANDLE TargetHandle,
    ACCESS_MASK DesiredAccess,
    ULONG Attributes,
    ULONG Options
    );

typedef struct _SYSTEM_HANDLE
{
    ULONG ProcessId;
    BYTE ObjectTypeNumber;
    BYTE Flags;
    WORD Handle;
    PVOID Object;
    ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE, *PSYSTEM_HANDLE;



typedef struct _SYSTEM_HANDLE_INFORMATION
{
    ULONG HandleCount;
    SYSTEM_HANDLE Handles[1];
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;

typedef struct _UNICODE_STRING
{
    USHORT Length;
    USHORT MaximumLength;
    PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef enum _POOL_TYPE
{
    NonPagedPool,
    PagedPool,
    NonPagedPoolMustSucceed,
    DontUseThisType,
    NonPagedPoolCacheAligned,
    PagedPoolCacheAligned,
    NonPagedPoolCacheAlignedMustS
} POOL_TYPE, *PPOOL_TYPE;

typedef struct _OBJECT_TYPE_INFORMATION
{
    UNICODE_STRING Name;
    ULONG TotalNumberOfObjects;
    ULONG TotalNumberOfHandles;
    ULONG TotalPagedPoolUsage;
    ULONG TotalNonPagedPoolUsage;
    ULONG TotalNamePoolUsage;
    ULONG TotalHandleTableUsage;
    ULONG HighWaterNumberOfObjects;
    ULONG HighWaterNumberOfHandles;
    ULONG HighWaterPagedPoolUsage;
    ULONG HighWaterNonPagedPoolUsage;
    ULONG HighWaterNamePoolUsage;
    ULONG HighWaterHandleTableUsage;
    ULONG InvalidAttributes;
    GENERIC_MAPPING GenericMapping;
    ULONG ValidAccess;
    BOOLEAN SecurityRequired;
    BOOLEAN MaintainHandleCount;
    USHORT MaintainTypeList;
    POOL_TYPE PoolType;
    ULONG PagedPoolUsage;
    ULONG NonPagedPoolUsage;
} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;

 
typedef struct _OBJECT_NAME_INFORMATION{
	UNICODE_STRING Name;
	WCHAR	NameBuffer[0];
}OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;


PWSTR Access[32];

using namespace std; 



int main(){

	NTSTATUS status;

	_NtQuerySystemInformation NtQuerySystemInformation = (_NtQuerySystemInformation)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQuerySystemInformation");
	_NtQueryObject NtQueryObject = (_NtQueryObject)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQueryObject");
	_NtDuplicateObject NtDuplicateObject = (_NtDuplicateObject)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtDuplicateObject");
	


	FILE *out;
	ULONG i;
	int j;
	DWORD ret;
	HANDLE Process, han, hh;
	POBJECT_NAME_INFORMATION names;
	POBJECT_TYPE_INFORMATION type;
	PSYSTEM_HANDLE_INFORMATION handles;
	ULONG handleInfoSize = 65536;
	DWORD needed = 0;
	DWORD size = sizeof(_SYSTEM_HANDLE);

	out = fopen("WinHandlesList.txt", "w");


	handles = (PSYSTEM_HANDLE_INFORMATION)malloc(handleInfoSize);
	
	while ((status = NtQuerySystemInformation(
        SystemHandleInformation,
        handles,
        handleInfoSize,
        //NULL
		&size
        )) == STATUS_INFO_LENGTH_MISMATCH)
        handles = (PSYSTEM_HANDLE_INFORMATION)realloc(handles, handleInfoSize += 65536);


	names = (POBJECT_NAME_INFORMATION)malloc((handles->HandleCount)*sizeof(OBJECT_NAME_INFORMATION));
	type = (POBJECT_TYPE_INFORMATION)malloc((handles->HandleCount)*sizeof(OBJECT_TYPE_INFORMATION));
	
	OBJECT_TYPE_INFORMATION Type;
	fprintf(out, "Number of handles = %d\n", handles->HandleCount);
	int b = 0;

Последний раз редактировалось ACE Valery; 20.03.2013 в 23:24.
Student_2009 вне форума Ответить с цитированием
Старый 20.03.2013, 00:17   #7
Student_2009
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 16
По умолчанию

Код:
for(i = 0; i < handles->HandleCount; i++){

		fprintf(out, "-------------------------------------------------------------------------------------\n");
		fprintf(out, "-------------------------------------------------------------------------------------\n");

		fprintf(out, "PID - %d   Handle - %d   ", handles->Handles[i].ProcessId, handles->Handles[i].Handle/*, handles->Handles[i].GrantedAccess*/);
		Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, handles->Handles[i].ProcessId);
		if(!Process){
			
		}
		else{
			
			b++;
			hh = (HANDLE)handles->Handles[i].Handle;
			if(DuplicateHandle(Process, hh, GetCurrentProcess(), &han, 0, 0, DUPLICATE_SAME_ACCESS)){
				status = NtQueryObject(han, ObjectTypeInformation, type, (handles->HandleCount)*sizeof(OBJECT_TYPE_INFORMATION), &ret); 
				fprintf(out, "Type - %S   ",type->Name.Buffer,type->Name.Buffer);
				
			}

		}

		
	}

	free(handles);
	free(names);
	free(type);
	fclose(out);

}

Последний раз редактировалось ACE Valery; 20.03.2013 в 23:24.
Student_2009 вне форума Ответить с цитированием
Старый 20.03.2013, 13:35   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Не код надо смотреть а makefile или кто там вызывает MinGW. Заголовочным файлам иногда нужны define определенных констант. Сравните что передает как аргументы VS2010
waleri вне форума Ответить с цитированием
Старый 20.03.2013, 21:04   #9
Student_2009
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 16
По умолчанию

Я без makefile делал. Просто gcc C:\User\Вит\main.cpp.
Student_2009 вне форума Ответить с цитированием
Старый 21.03.2013, 02:49   #10
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Ну укажите же ключи, о которых вас попросили и выложите лог ошибок после здесь.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при компиляции petro.chelsea1234 Общие вопросы C/C++ 7 28.12.2012 18:15
Ошибка при компиляции Zhenya666 Помощь студентам 0 20.04.2012 20:22
ошибка при компиляции chircov090993 Общие вопросы Delphi 5 15.04.2012 21:39
Ошибка при компиляции. Rin Общие вопросы C/C++ 14 07.10.2011 20:34
Ошибка при компиляции CrazyRabbit Общие вопросы C/C++ 3 25.12.2008 18:41