NetWKSTA.cpp (fwd)
Richard Sharpe
rsharpe at richardsharpe.com
Thu May 1 18:11:38 GMT 2003
Hi,
for those who want to take part in the fun of figuring out some more RPCs,
here is the C++ program I have been using.
Of course, you need VC++ for the include files and libraries.
// NetWKSTA.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <assert.h>
#include <windows.h>
#include <lm.h>
int main(int argc, char* argv[])
{
LPWKSTA_USER_INFO_0 pBuf = NULL;
LPWKSTA_USER_INFO_0 pTmpBuf;
LPWKSTA_INFO_102 pInfoBuf100 = NULL;
LPWKSTA_INFO_502 pInfoBuf502 = NULL;
WKSTA_INFO_502 wi;
DWORD dwLevel = 0;
DWORD dwPrefMaxLen = -1;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
DWORD dwResumeHandle = 0;
DWORD i;
DWORD dwTotalCount = 0;
NET_API_STATUS nStatus;
LPTSTR pszServerName = NULL;
if (argc > 2)
{
fprintf(stderr, "Usage: %s [\\\\ServerName]\n", argv[0]);
return 1;
}
// The server is not the default local computer.
//
if (argc == 2)
pszServerName = (char *)L"\\\\NT4PDC";
fprintf(stdout, "\nUsers currently logged on %s:\n", pszServerName);
//
// Call the NetWkstaUserEnum function, specifying level 0.
//
fprintf(stdout, "\n");
dwLevel = 100;
nStatus = NetWkstaGetInfo(pszServerName,
dwLevel,
(LPBYTE *)&pInfoBuf100);
dwLevel = 101;
nStatus = NetWkstaGetInfo(pszServerName,
dwLevel,
(LPBYTE *)&pInfoBuf100);
dwLevel = 102;
nStatus = NetWkstaGetInfo(pszServerName,
dwLevel,
(LPBYTE *)&pInfoBuf100);
dwLevel = 502;
nStatus = NetWkstaGetInfo(pszServerName,
dwLevel,
(LPBYTE *)&pInfoBuf502);
if (pInfoBuf502 != NULL)
{
//
// Copy the existing settings to the new structure,
// and free the buffer.
//
CopyMemory(&wi, pInfoBuf502, sizeof(wi));
NetApiBufferFree(pInfoBuf502);
}
nStatus = NetWkstaSetInfo(pszServerName,
dwLevel,
(LPBYTE)&wi,
NULL);
dwLevel = 0;
nStatus = NetWkstaUserEnum(pszServerName,
dwLevel,
(LPBYTE*)&pBuf,
dwPrefMaxLen,
&dwEntriesRead,
&dwTotalEntries,
&dwResumeHandle);
if ((nStatus != NERR_Success) && (nStatus != ERROR_MORE_DATA))
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
dwLevel = 1;
nStatus = NetWkstaUserEnum(pszServerName,
dwLevel,
(LPBYTE*)&pBuf,
dwPrefMaxLen,
&dwEntriesRead,
&dwTotalEntries,
&dwResumeHandle);
if ((nStatus != NERR_Success) && (nStatus != ERROR_MORE_DATA))
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
// Get info about a user ...
nStatus = NetWkstaUserGetInfo(pszServerName,
dwLevel,
(LPBYTE *)&pBuf);
if ((nStatus != NERR_Success) && (nStatus != ERROR_MORE_DATA))
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
dwLevel = 0;
nStatus = NetWkstaTransportEnum(pszServerName,
dwLevel,
(LPBYTE*)&pBuf,
dwPrefMaxLen,
&dwEntriesRead,
&dwTotalEntries,
&dwResumeHandle);
if ((nStatus != NERR_Success) && (nStatus != ERROR_MORE_DATA))
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
return 0;
}
Regards
-----
Richard Sharpe, rsharpe[at]ns.aus.com, rsharpe[at]samba.org,
sharpe[at]ethereal.com, http://www.richardsharpe.com
More information about the samba-technical
mailing list