33. Jak odczytać datę z serwera?

Niekiedy musimy zabezpieczyć program przed zmianą daty na stacji roboczej. Narzucającym się rozwiązaniem jest odczytanie daty nie z komputera lokalnego, ale z serwera. Tylko jak to zrobić? Jednym ze sposobów jest edycja dowolnego pliku na serwerze i odczytanie daty jego modyfikacji. Inna metoda polega na wykorzystaniu funkcji API, oto ona:
'Na początek kilka deklaracji
Private Declare Function NetRemoteTOD Lib "Netapi32.dll" _
	(yServer As Any, pBuffer As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
	(pTo As Any, uFrom As Any, ByVal lSize As Long)
Private Declare Function NetApiBufferFree Lib "netapi32" _
	(ByVal lpBuffer As Long) As Long
'A potem właściwa funkcja
Sub UstawDateWgSerwera()
Dim serwer() As Byte, ret As Long, ptrBuf As Long
Dim wynik(12) As Long
    serwer = "\\serwer" & vbNullChar
    ret = NetRemoteTOD(serwer(0), ptrBuf) 'ptrBuf to wskaźnik do bufora z wynikiem
    'Za pomocą CopyMemory przepisujemy dane z bufora do tablicy wynik()
    CopyMemory wynik(0), ByVal ptrBuf, 12 * 4 'Bufor zawiera 12 elementow typu Long
    Call NetApiBufferFree(ptrBuf)  'Usuwamy bufor z pamięci
    'Tablica wynik() zawiera teraz odczytane elementy daty z serwera,
    'ustawiamy na tej podstawie czas na stacji roboczej
    Date = DateSerial(wynik(10), wynik(9), wynik(8)) 'rok ,mies, dzien
    Time = TimeSerial(wynik(2), wynik(3) - wynik(6), wynik(4)) 'godz, min - strefa, sek
    '(Uwaga: Wynik zawiera czas uniwersalny - musimy uwzględnić strefę)
    
    'A oto znaczenie wszystkich 12 elementow wyniku:
    'wynik(0) -> elapsedt (ile sekund uplynelo od 01-01-1970)
    'wynik(1) -> msecs (ile milisekund uplynelo od startu systemu)
    'wynik(2) -> hours
    'wynik(3) -> mins
    'wynik(4) -> secs
    'wynik(4) -> hunds (setne sekundy)
    'wynik(6) -> timezone (przesunięcie czasu względem Greenwich w minutach)
    'wynik(6) -> tinterval (okres zegara systemowego w dziesięciotysiecznych sekundy)
    'wynik(8) -> day
    'wynik(9) -> month
    'wynik(10)-> year
    'wynik(10)-> weekday
End Sub