Что нового

[Сеть, интернет] Почему не считывается ARP массив при работе скрипта в виде сервиса

Houl777

Знающий
Сообщения
38
Репутация
5
Имеется функция по считыванию ARP в массив. Если запустить из под администратора, то работает замечательно. Но стоит исполняемый файл завести как сервис, то считывание ARP значений в массив происходит только 1 раз. Дальше ничего не происходит. В чём может быть дело?

Код:
While 1
_arp()
Sleep (3000)
WEnd

Func _arp ()
	Local $aCall = DllCall("iphlpapi.dll", "dword", "GetIpNetTable", _
            "ptr*", 0, _
            "dword*", 0, _
            "bool", 1)
    If @error Then Return SetError(1, 0, 0)
    If $aCall[0] <> 122 Then Return SetError(2, 0, 0)
    Local $iSize = $aCall[2]
    Local $tByteStructure = DllStructCreate("byte[" & $iSize & "]")
    Local $pPointer = DllStructGetPtr($tByteStructure)

    $aCall = DllCall("iphlpapi.dll", "dword", "GetIpNetTable", _
            "ptr", $pPointer, _
            "dword*", $iSize, _
            "bool", 1)

    Local $tMIB_IPNETTABLE_NumEnries = DllStructCreate("dword dwNumEntries;", $pPointer)
    Local $iNumEntries = DllStructGetData($tMIB_IPNETTABLE_NumEnries, "dwNumEntries")

    $pPointer += 4 ;

    Local Const $MAXLEN_PHYSADDR = 8
    Local $tMIB_IPNETROW
	Local $aARPTable[$iNumEntries][3]
	
    For $i = 0 To $iNumEntries - 1
        $tMIB_IPNETROW = DllStructCreate("dword dwIndex;" & _
                "dword dwPhysAddrLen;" & _
                "byte bPhysAddr[" & $MAXLEN_PHYSADDR & "];" & _
                "dword dwAddr;" & _
                "dword dwType;", _
                $pPointer)

		$aARPTable[$i][1] = _BinToMAC(DllStructGetData($tMIB_IPNETROW, "bPhysAddr"), DllStructGetData($tMIB_IPNETROW, "dwPhysAddrLen"))
		$aARPTable[$i][0] = _NumToIP(DllStructGetData($tMIB_IPNETROW, "dwAddr"))
      
        $pPointer += DllStructGetSize($tMIB_IPNETROW)
    Next
	$aARPTable = _ClearArray ($aARPTable)
	Return $aARPTable
EndFunc


P.s. Функция честно найдена на просторах интернета.
 
Верх