-
Notifications
You must be signed in to change notification settings - Fork 318
Expand file tree
/
Copy pathConvertIPv4StringToUnsignedLong.cpp
More file actions
47 lines (35 loc) · 1.29 KB
/
ConvertIPv4StringToUnsignedLong.cpp
File metadata and controls
47 lines (35 loc) · 1.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "Win32Helper.h"
ULONG ConvertIPv4StringToUnsignedLongW(_In_ PWCHAR IpAddress)
{
RTLIPV4STRINGTOADDRESSW RtlIpv4StringToAddressW = NULL;
HMODULE hModule = NULL;
IN_ADDR IpAddressObject = { 0 };
LPCWSTR TerminatorObject = NULL;
hModule = GetModuleHandleEx2W(L"ntdll.dll");
if (hModule == NULL)
return 0;
RtlIpv4StringToAddressW = (RTLIPV4STRINGTOADDRESSW)GetProcAddressA((DWORD64)hModule, "RtlIpv4StringToAddressW");
if (!RtlIpv4StringToAddressW)
return 0;
if (RtlIpv4StringToAddressW(IpAddress, FALSE, &TerminatorObject, &IpAddressObject) != ERROR_SUCCESS)
return FALSE;
RtlIpv4StringToAddressW = NULL;
return IpAddressObject.S_un.S_addr;
}
ULONG ConvertIPv4StringToUnsignedLongA(_In_ PCHAR IpAddress)
{
RTLIPV4STRINGTOADDRESSA RtlIpv4StringToAddressA = NULL;
HMODULE hModule = NULL;
IN_ADDR IpAddressObject = { 0 };
LPCSTR TerminatorObject = NULL;
hModule = GetModuleHandleEx2W(L"ntdll.dll");
if (hModule == NULL)
return 0;
RtlIpv4StringToAddressA = (RTLIPV4STRINGTOADDRESSA)GetProcAddressA((DWORD64)hModule, "RtlIpv4StringToAddressA");
if (!RtlIpv4StringToAddressA)
return 0;
if (RtlIpv4StringToAddressA(IpAddress, FALSE, &TerminatorObject, &IpAddressObject) != ERROR_SUCCESS)
return FALSE;
RtlIpv4StringToAddressA = NULL;
return IpAddressObject.S_un.S_addr;
}