| 
			| 
					
						| JIOST 
								Интересующийся    Offline 
								Пол:    | 
								|  | «  : 19-04-2015 17:54 »  |  | 
 
 Доброе время суток!Разбираюсь с промежуточным драйвером (тестирую на WinXP), конкретно с примером passthru из WDK(DDK).
 Получилось выловить IP-адреса приходящих пакетов в функции PtReceive из LookAheadBuffer (поиск по форуму помог), а вот получить IP-адрес исходящих пакетов не могу понять как. Вроде ловить пакеты можно в MPSendPackets, но не знаю как.
 Драйвер пока тестирую на WinXP.
 Было бы прекрасно разъяснить следующие вопрос:
 1) Каким образом можно получить IP-адреса(source ip, destination ip) исходящих пакета в MPSendPackets?
 2) Как можно организовать отслеживание числа потерянных пакетов?
 3) Как отправлять пакеты через определённый промежуток времени? Пробовал использовать NDISMSleep но получал BSOD.
 В kernel-mode и драйверах совсем новичок.
 
 Заранее благодарен!
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| JIOST 
								Интересующийся    Offline 
								Пол:    | 
								|  | « Ответ #1 :  20-04-2015 16:35 »   |  | 
 
 Разобрался как вытащить IP-адрес пакетов в MPSendPackets из PNDIS_BUFFER, с помощю: |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| JIOST 
								Интересующийся    Offline 
								Пол:    | 
								|  | « Ответ #2 : 20-04-2015 16:43 »  |  | 
 
 NdisQueryPacket(Packet, null, null, &FirstBuffer, null);NdisQueryBuffer(FirstBuffer, &data, &datalength);
 NdisGetNextBuffer(FirstBuffer, &FirstBuffer);
 out буфер data привёл к структуре ethernet_header/ip_header
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Ochkarik | 
								|  | « Ответ #3 : 20-04-2015 16:48 »  |  | 
 
 это хорошо) а то я к сожалению не силен сетевых решениях, и все думал чем бы помочь и так и не придумал) |  
						| 
								|  |  
								|  |  Записан | 
 
 RTFM уже хоть раз наконец!     :[ ну или хотя бы STFW ... |  |  | 
	| 
			| 
					
						| JIOST 
								Интересующийся    Offline 
								Пол:    | 
								|  | « Ответ #4 : 12-06-2015 16:53 »  |  | 
 
 Можно ли в функции MPSendPackets организовать задержку/паузу/ожидание на 100-500 мс. так, чтобы не висла машина?)Задача: отправить пакет в нужное время.
 тщетно экспериментировал со следующими функциями:
 KeDelayExecutionThread() - есть задержка но и тормоза системы, бывал bsod;
 NdisMSleep() - чаще bsod, чем sleep;
 NdisStallExecution() - нормально работает даже при >50 мкс. (хотя в WDK рекомендуют не более 50) и также тормозит всё.
 
 Или может другие варианты есть?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Ochkarik | 
								|  | « Ответ #5 : 13-06-2015 08:50 »  |  | 
 
 а какой там IRQL? |  
						| 
								|  |  
								|  |  Записан | 
 
 RTFM уже хоть раз наконец!     :[ ну или хотя бы STFW ... |  |  | 
	| 
			| 
					
						| JIOST 
								Интересующийся    Offline 
								Пол:    | 
								|  | « Ответ #6 : 13-06-2015 09:10 »  |  | 
 
 DISPATCH_LEVEL |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Ochkarik | 
								|  | « Ответ #7 : 13-06-2015 11:21 »  |  | 
 
 не, ну а как вы хотели)))это уровень, блокировки переключения контекста. будет работать только обработка прерываний.
 
 Добавлено через 1 минуту и 19 секунд:
 ЗЫ StallExecution() -поэтому и рекомендуют не более 50 мкс...
 
 Добавлено через 59 секунд:
 PS меняйте логику обработки, делайте отложенную обработку на PASSIVE если не можете завершить сразу.
 |  
						| 
								|  |  
								| « Последнее редактирование: 13-06-2015 11:24 от Ochkarik » |  Записан | 
 
 RTFM уже хоть раз наконец!     :[ ну или хотя бы STFW ... |  |  | 
	| 
			| 
					
						| JIOST 
								Интересующийся    Offline 
								Пол:    | 
								|  | « Ответ #8 : 13-06-2015 12:09 »  |  | 
 
 Понизить IRQL до PASSIVE и после паузы возвращать DISPATCH? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Ochkarik | 
								|  | « Ответ #9 : 14-06-2015 20:06 »  |  | 
 
 нет, вы не можете вниз IRQL переключать - глюки начнутся. только вверх.я имею в виду, что нибудь типа отложенной обработки делать. не знаю как это применительно к NDIS правда будет. там обязательно сразу пакет завершать? или можно его пометить как незавершенный?
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 RTFM уже хоть раз наконец!     :[ ну или хотя бы STFW ... |  |  | 
	|  |