Part 2 : VC++ Code


#include stdio.h
#include string.h
#include windows.h
#include LMACCESS.H
#include WINNT.H
#include LMCONS.H

#define MAX_LENGTH 32
#define MAX_MSG_BUF_SIZE 32768

int main(int argc, char *argv[])
{
// DNLEN, UNLEN and PWLEN are constants from LMCONS.H
int changePasswordStatus; // buffer for the change password result
WCHAR domainname[DNLEN+1]; // buffer for the domain or workstation name
WCHAR username[UNLEN+1]; // buffer for the user name
WCHAR oldpassword[PWLEN+1]; // buffer for the old password
WCHAR newpassword[PWLEN+1]; // buffer for the new password
CHAR *msgBuf; // buffer for message text from system
int msgOutPut; // buffer to capture the result of
// FormatMessage for
// future use

// determine whether the number of parameters is correct
// if not then display the proper syntax

if (argc < 2 || argc > 5)
{
printf ("The syntax of the command is incorrect.\n");
printf ("\ncpw domainname username oldpassword newpassword\n");
return 0;
}

//convert all of the parameters from ANSI to UNICODE

MultiByteToWideChar(
CP_ACP, // code page
0, // character-type options
argv[1], // address of string to map
strlen(argv[1])+1, // number of characters in string inc null!!
(LPWSTR)&domainname, // address of wide-character buffer
sizeof(domainname) // size of buffer
);

MultiByteToWideChar(
CP_ACP, // code page
0, // character-type options
argv[2], // address of string to map
strlen(argv[2])+1, // number of characters in string inc null!!
(LPWSTR)&username, // address of wide-character buffer
sizeof(username) // size of buffer
);

MultiByteToWideChar(
CP_ACP, // code page
0, // character-type options
argv[3], // address of string to map
strlen(argv[3])+1, // number of characters in string inc null!!
(LPWSTR)&oldpassword, // address of wide-character buffer
sizeof(oldpassword) // size of buffer
);

MultiByteToWideChar(
CP_ACP, // code page
0, // character-type options
argv[4], // address of string to map
strlen(argv[4])+1, // number of characters in string inc null!!
(LPWSTR)&newpassword, // address of wide-character buffer
sizeof(newpassword) // size of buffer
);

// NetUserChangePassword expects UNICODE
// which is why we used the MultiByteToWideChar
// to convert from ANSI to UNICODE.

changePasswordStatus = NetUserChangePassword(
domainname, // pointer to server or domain name string
username, // pointer to user name string
oldpassword, // pointer to old password string
newpassword // pointer to new password string
);

// FormatMessage is beyond the scope of this
// article for detailed information on the use of
// FormatMessage, please refer to the on-line
// Documentation in Microsoft Visual C++

msgOutPut = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS |
40, NULL, changePasswordStatus, MAKELANGID(LANG_ENGLISH,
SUBLANG_ENGLISH_US), (LPTSTR) &msgBuf, MAX_MSG_BUF_SIZE,
NULL
);

printf("\n%s\n", msgBuf);
// Print the error message generated by FormatMessage

Reference : MSDN

posted under |

0 comments:

Newer Post Older Post Home

We have seen by

    Followers

    Translate


Recent Comments