コード例 #1
0
ファイル: KSiS1.cpp プロジェクト: Gambrinius/Laboratory-code
// Fetches the MAC address and prints it
static void GetMACaddress(void)
{
	unsigned char MACData[8];						// Allocate data structure for MAC (6 bytes needed)

	WKSTA_TRANSPORT_INFO_0 *pwkti;					// Allocate data structure for Netbios
	DWORD dwEntriesRead;
	DWORD dwTotalEntries;
	BYTE *pbBuffer;

	// Get MAC address via NetBios's enumerate function
	NET_API_STATUS dwStatus = NetWkstaTransportEnum(
		NULL,						// [in]  server name
		0,							// [in]  data structure to return
		&pbBuffer,					// [out] pointer to buffer
		MAX_PREFERRED_LENGTH,		// [in]  maximum length
		&dwEntriesRead,				// [out] counter of elements actually enumerated
		&dwTotalEntries,			// [out] total number of elements that could be enumerated
		NULL);						// [in/out] resume handle
	assert(dwStatus == NERR_Success);

	pwkti = (WKSTA_TRANSPORT_INFO_0 *)pbBuffer;		// type cast the buffer

	for (DWORD i = 0; i< dwEntriesRead; i++)			// first address is 00000000, skip it
	{												// enumerate MACs and print
		swscanf((wchar_t *)pwkti[i].wkti0_transport_address, L"%2hx%2hx%2hx%2hx%2hx%2hx",
			&MACData[0], &MACData[1], &MACData[2], &MACData[3], &MACData[4], &MACData[5]);
		PrintMACaddress(MACData);
	}

	// Release pbBuffer allocated by above function
	dwStatus = NetApiBufferFree(pbBuffer);
	assert(dwStatus == NERR_Success);
}
コード例 #2
0
ファイル: cmdConfig.c プロジェクト: Moteesh/reactos
static
INT
DisplayWorkstationConfig(VOID)
{
    PWKSTA_INFO_100 WorkstationInfo = NULL;
    PWKSTA_USER_INFO_1 UserInfo = NULL;
    PWKSTA_TRANSPORT_INFO_0 TransportInfo = NULL;
    DWORD dwRead = 0, dwTotal = 0, i;
    INT nPaddedLength = 38;
    NET_API_STATUS Status;

    Status = NetWkstaGetInfo(NULL, 100, (PBYTE*)&WorkstationInfo);
    if (Status != NERR_Success)
        goto done;

    Status = NetWkstaUserGetInfo(NULL, 1, (PBYTE*)&UserInfo);
    if (Status != NERR_Success)
        goto done;

    Status = NetWkstaTransportEnum(NULL,
                                   0,
                                   (PBYTE*)&TransportInfo,
                                   MAX_PREFERRED_LENGTH,
                                   &dwRead,
                                   &dwTotal,
                                   NULL);
    if (Status != NERR_Success)
        goto done;

    PrintPaddedMessageString(4450, nPaddedLength);
    ConPrintf(StdOut, L"\\\\%s\n", WorkstationInfo->wki100_computername);

    PrintPaddedMessageString(4468, nPaddedLength);
    ConPuts(StdOut, L"...\n");

    PrintPaddedMessageString(4451, nPaddedLength);
    ConPrintf(StdOut, L"%s\n", UserInfo->wkui1_username);

    ConPuts(StdOut, L"\n");

    PrintPaddedMessageString(4453, nPaddedLength);
    ConPuts(StdOut, L"\n");
    for (i = 0; i < dwRead; i++)
    {
        ConPrintf(StdOut, L"      %s (%s)\n",
                  &TransportInfo[i].wkti0_transport_name[8],
                  TransportInfo[i].wkti0_transport_address);
    }
    ConPuts(StdOut, L"\n");

    PrintPaddedMessageString(4452, nPaddedLength);
    ConPrintf(StdOut, L"%lu.%lu\n",
              WorkstationInfo->wki100_ver_major,
              WorkstationInfo->wki100_ver_minor);

    ConPuts(StdOut, L"\n");

    PrintPaddedMessageString(4455, nPaddedLength);
    ConPrintf(StdOut, L"%s\n", WorkstationInfo->wki100_langroup);

    PrintPaddedMessageString(4469, nPaddedLength);
    ConPuts(StdOut, L"...\n");

    PrintPaddedMessageString(4456, nPaddedLength);
    ConPrintf(StdOut, L"%s\n", UserInfo->wkui1_logon_domain);

    ConPuts(StdOut, L"\n");

    PrintPaddedMessageString(4458, nPaddedLength);
    ConPuts(StdOut, L"...\n");

    PrintPaddedMessageString(4459, nPaddedLength);
    ConPuts(StdOut, L"...\n");

    PrintPaddedMessageString(4460, nPaddedLength);
    ConPuts(StdOut, L"...\n");

done:
    if (TransportInfo != NULL)
        NetApiBufferFree(TransportInfo);

    if (UserInfo != NULL)
        NetApiBufferFree(UserInfo);

    if (WorkstationInfo != NULL)
        NetApiBufferFree(WorkstationInfo);

    return 0;
}
コード例 #3
0
ファイル: MacFetcher.cpp プロジェクト: Zhangwusheng/sdk
bool CMacFetcher::GetMACbyNetBiosRedir(MACAddress& addr)
{
	WKSTA_TRANSPORT_INFO_0 *pwkti = NULL; 
	DWORD dwEntriesRead;
	DWORD dwTotalEntries;
	BYTE *pbBuffer = NULL;
	
	// 通过 NetBIOS的枚举函数获取MAC地址
	NET_API_STATUS dwStatus = NetWkstaTransportEnum(
		NULL,
		0,
		&pbBuffer,
		MAX_PREFERRED_LENGTH,
		&dwEntriesRead,
		&dwTotalEntries,
		NULL);
	if (dwStatus != NERR_Success)
	{
		return false;
	}

	if (pbBuffer == NULL || dwEntriesRead == 0)
	{
		return false;
	}
	
	pwkti = (WKSTA_TRANSPORT_INFO_0 *)pbBuffer; // 指针类型转换
	
	for(DWORD i = 0; i < dwEntriesRead && pwkti; ++i)
	{ 
		short usMac[6] = { 0 };
		// 读取并打印MAC地址
#if _MSC_VER <= 1200
		if (swscanf((wchar_t *)pwkti[i].wkti0_transport_address,
			L"%2hx%2hx%2hx%2hx%2hx%2hx",
			&usMac[0],
			&usMac[1],
			&usMac[2], 
			&usMac[3],
			&usMac[4],
			&usMac[5]) == 6)
#else
		if (swscanf_s((wchar_t *)pwkti[i].wkti0_transport_address,
			L"%2hx%2hx%2hx%2hx%2hx%2hx",
			&usMac[0],
			&usMac[1],
			&usMac[2], 
			&usMac[3],
			&usMac[4],
			&usMac[5]) == 6)
#endif
		{
			for (int j = 0; j < 6; ++j)
			{
				addr.v[j] = (unsigned char)(usMac[j] & 0x00ff);
			}
			if (addr != MACAddress())
			{
				break;
			}
		}
	}

	NetApiBufferFree(pbBuffer);
	return true;
}