forked from gentilkiwi/kekeo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkull_m_net.c
53 lines (49 loc) · 1.71 KB
/
kull_m_net.c
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
48
49
50
51
52
53
/* Benjamin DELPY `gentilkiwi`
https://blog.gentilkiwi.com
Licence : https://creativecommons.org/licenses/by/4.0/
*/
#include "kull_m_net.h"
BOOL kull_m_net_getCurrentDomainInfo(PPOLICY_DNS_DOMAIN_INFO * pDomainInfo)
{
BOOL status = FALSE;
LSA_HANDLE hLSA;
LSA_OBJECT_ATTRIBUTES oaLsa = {0};
if(NT_SUCCESS(LsaOpenPolicy(NULL, &oaLsa, POLICY_VIEW_LOCAL_INFORMATION, &hLSA)))
{
status = NT_SUCCESS(LsaQueryInformationPolicy(hLSA, PolicyDnsDomainInformation, (PVOID *) pDomainInfo));
LsaClose(hLSA);
}
return status;
}
BOOL kull_m_net_CreateWellKnownSid(WELL_KNOWN_SID_TYPE WellKnownSidType, PSID DomainSid, PSID * pSid)
{
BOOL status = FALSE;
DWORD szNeeded = 0, dwError;
CreateWellKnownSid(WellKnownSidType, DomainSid, NULL, &szNeeded);
dwError = GetLastError();
if((dwError == ERROR_INVALID_PARAMETER) || (dwError == ERROR_INSUFFICIENT_BUFFER))
if(*pSid = (PSID) LocalAlloc(LPTR, szNeeded))
if(!(status = CreateWellKnownSid(WellKnownSidType, DomainSid, *pSid, &szNeeded)))
*pSid = LocalFree(*pSid);
return status;
}
BOOL kull_m_net_getDC(LPCWSTR fullDomainName, DWORD altFlags, LPWSTR * fullDCName)
{
BOOL status = FALSE;
DWORD ret, size;
PDOMAIN_CONTROLLER_INFO cInfo = NULL;
ret = DsGetDcName(NULL, fullDomainName, NULL, NULL, altFlags | DS_IS_DNS_NAME | DS_RETURN_DNS_NAME, &cInfo);
if(ret == ERROR_SUCCESS)
{
size = (DWORD) (wcslen(cInfo->DomainControllerName + 2) + 1) * sizeof(wchar_t);
if(*fullDCName = (wchar_t *) LocalAlloc(LPTR, size))
{
status = TRUE;
RtlCopyMemory(*fullDCName, cInfo->DomainControllerName + 2, size);
}
NetApiBufferFree(cInfo);
}
else PRINT_ERROR(L"DsGetDcName: %u\n", ret);
return status;
}