In de IP Helper API komt de GetAdaptersInfo functie voor, die een IP_ADAPTER_INFO structuur vult. Die ziet er als volgt uit:
Ik kan hiervan in Delphi probleemloos alle velden interpreteren, behalve LeaseObtained en LeaseExpires. Inmiddels ben ik erachter dat het time_t type een 32-bits integer is. Maar hoe interpreteer ik dat ding?
De documentatie van Microsoft zegt er alleen het volgende over:
Via ipconfig /all op de command prompt zie ik het volgende:

Ik weet inmiddels via wat debugwerk dat de volgende waarden moeten overeenkomen met wat ipconfig meldt over de DHCP leases:
LeaseObtained = 1127077508 dec = 432DD684 hex
LeaseExpires = 1127084708 dec = 432DF2A4 hex
Het verschil tussen deze waarden is 7200, terwijl ipconfig aangeeft dat dit overeenkomt met 2 uur. Anders gesteld: een verandering van 1 in een time_t variable komt overeen met 1 seconde. Maar hoe kom ik nu naar een juiste interpretatie van C-style time_t, bijvoorbeeld als een Delphi-style TDateTime?
Kan iemand me op weg helpen?
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO* Next; DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD Index; UINT Type; UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires; } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; |
Ik kan hiervan in Delphi probleemloos alle velden interpreteren, behalve LeaseObtained en LeaseExpires. Inmiddels ben ik erachter dat het time_t type een 32-bits integer is. Maar hoe interpreteer ik dat ding?
Ik gebruik GetAdaptersInfo in Delphi en wil dan ook het time_t formaat kunnen lezen in Delphi. Een simpele conversie naar TDateTime geeft een foutmelding: 'Invalid argument to time encode'. Blijkbaar werkt het volgende dus niet:LeaseObtained
Time when the current DHCP lease was obtained.
LeaseExpires
Time when the current DHCP lease expires.
Delphi:
1
2
3
4
| function MakeDateTime(T: time_t): TDateTime; begin Result := FileDateToDateTime(T); end; |
Via ipconfig /all op de command prompt zie ik het volgende:

Ik weet inmiddels via wat debugwerk dat de volgende waarden moeten overeenkomen met wat ipconfig meldt over de DHCP leases:
LeaseObtained = 1127077508 dec = 432DD684 hex
LeaseExpires = 1127084708 dec = 432DF2A4 hex
Het verschil tussen deze waarden is 7200, terwijl ipconfig aangeeft dat dit overeenkomt met 2 uur. Anders gesteld: een verandering van 1 in een time_t variable komt overeen met 1 seconde. Maar hoe kom ik nu naar een juiste interpretatie van C-style time_t, bijvoorbeeld als een Delphi-style TDateTime?
Kan iemand me op weg helpen?
Een goede grap mag vrienden kosten.