Доброе время суток, Marouder! А шнурки вам не погладить ;) Большинство из этих функций являются недокументированными, практически все ядро ос находится в нем. Ответ отправлен: 23.05.2003, 11:15 Отправитель: xiron Отвечает Ramzes
Доброе время суток, Marouder! Описания ВСЕХ функций ты нигде не найдешь. В MSDN и NTDDK help есть описания некоторых функций, в частности функций с префиксами Rtl* и Zw*, и функций типа qsort, memcpy и.т.д. вот описание таких интересных функций типа NtCreateFile, NtCreateThread, Nt*, или LdrLoadDll, LdrUnloadDll ты нигде не найдешь, потому что они НЕ ДОКУМЕНТИРОВАНЫ. пока Ответ отправлен: 23.05.2003, 11:03 Отправитель: Ramzes
Вопрос № 793
Здравствуйте, уважаемые Эксперты. Решил занятся програмированием сетевых приложений и появились некоторые вопросы: 1) Как организовать передачу/прием ICMP сообщений? 2) Как, при написание сниффера, слушать канальный уровень? 3) Как сделать "впрыск" минуя канальный уровень? Язык С++ Заранее благодарен.
Доброе время суток, vdr! 1. Можно поставить сокет на сетевом уровне, и ручками создавать и посылать ICMP сообшения. 2. Я думаю придется писать драйвер. Ответ отправлен: 26.05.2003, 13:01 Отправитель: Ramzes Отвечает xiron
Приветствую Вас, vdr! 1) Можно при помощи RAW Sockets Создаеш RAW Socket, меняеш его опции WSAIoctl функцией, поставив SIO_RCVALL. Теперь твой сокет будет ловить пакеты на сетевом уровне функцией recv. Можеш вручную создать свой ICMP message и функцией send послать ее. 2) Мне кажется чтобы перехватить пакеты на канальном уровне надо написать драйвер для сетевухи. 3) А что ты имееш ввиду под словом "впрыск" P.S SIO_RCVALL - дефайнута в Platform SDK winsock2.h, и ее нет в Platform SDK Visual C++. Если нет под рукой Platform SDK то впиши в место SIO_RCVALL 0x98000001 ;) Удачи Ответ отправлен: 26.05.2003, 15:16 Отправитель: xiron
Вопрос № 794
Здравствуйте эксперы. Такой вот вопрос. Имеется структрура: struct DATA { union VALUES { int valInt; float valFloat; }value; CString valString; } Как сделать так, чтобы valString была тоже в объединении, т.е. в одной области памяти, что и все остальные данные. Я пробовал ее туда ставил, но компилятор выдает ошибки, типа у valString есть конструктор копирования, как быть? Компилятор VC++6.0 Заранее благодарен.
Приветствую Вас, Kydesnik! Э, брат!Так делать нельзя. В объеденении могут быть только схожие переменные.Например: int, long, double - все они в памяти занимают двойное слово.Т.е. компилятор подрузумевает как одну переменную, которая может принять разные типы значений. Ну, а теперь подумай: что класс String имеет с ними общего(int valInt;float valFloat;).Во-первых при объявлении объекта, сразу же выполняется контруктор, который выделяет память не там где находятся int valInt;float valFloat;Во-вторых объект типа String может занимать впамяти и 2 байта и 200!А в то время int valInt;float valFloat; занимаю только двойное слова.Т.е. нет совместимости. Счастливо! Ответ отправлен: 25.05.2003, 12:52 Отправитель: BOLT Отвечает Avl2k
Приветствую Вас, Kydesnik! По стандарту член union'а не может иметь нетривиального конструктора. Если нельзя, но очень хочется :), то можно так: struct DATA { enum ValueType { typeInt, typeFloat, typeString } m_type; DATA(const CString& s): m_type(typeString) { ConstStr(&s); } ~DATA() { if(m_type == typeString) _GetStr()->~CString(); } DATA(const DATA& d): m_type(d.m_type) { switch(m_type) { case typeString: ConstStr(d._GetStr()); break; // остальные типы } } DATA& operator = (const DATA& d) { if(&d != this) { this->~DATA(); new(this)DATA(d); } return *this; } operator const CString&() const { return *_GetStr(); } union VALUES { int valInt; float valFloat; char valString[sizeof(CString)]; } m_value; private: void ConstStr(const CString* s) {new(&m_value.valString)CString(*s);}
CString* _GetStr() const {return (CString*)m_value.valString; } }; void f() { CString str = "12345566"; DATA d1(str); DATA d2 = d1; d1 = d2; str = d1; str = d2; } С уважением, Avl2k. Ответ отправлен: 26.05.2003, 11:52 Отправитель: Avl2k Отвечает Ramzes
Приветствую Вас, Kydesnik! Надеюсь эксПЕРЫ это ты не нарочно :))))) Честно говоря мне не понятно заяем тебе понадобилось засовывать CString в union вместе с int и float. Можно поставить туда указатель на CString. Ответ отправлен: 26.05.2003, 12:52 Отправитель: Ramzes
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.