Re: Get ASCII value for character when higher than 127



On 24 mei, 17:14, "Ben Voigt" <r...@xxxxxxxxxxxxx> wrote:
Instead of wcstombs, use WideCharToMultiByte and CP_UTF8

http://msdn2.microsoft.com/en-us/library/ms776420.aspx

Also write the UTF byte order mark to the beginning of the file, so it will
be decoded correctly by other programs (eg Notepad)

Thanks, this helped me further a bit. But I'm still not able to get
the correct int value for the special characters. For example, when I
reset a users password to the following:

éAbc1ƒëp$%^

The int values that are written to my textfile for the password file
are:

0-61-0-87-0065-0098-0099-0049-0-58--110-0-61-0-85-0112-

And this should be:

0130-0065-0098-0099-0049-0159-0137-0112-0036-0037-0094-

Any idea what it is I'm still doing wrong? My code now looks like
below.

Thanks again,
Sandra

=========================================================

#include <windows.h>
#include <ntsecapi.h>
#include <time.h>
#include <fstream>
#include <iostream>
#include "PwdHookNew.h"
#include <sstream>
#include <string>
#include <iomanip>
#include <lm.h>

using namespace std;

#ifndef STATUS_SUCCESS
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#endif

string GetASCIIString(string oristring)
{
bool test = true;
int i, k;
string numstrings;

ostringstream oss;
for(i=0;i<oristring.size();i++)
{
k = int(oristring[i]);
oss << setw(4) << setfill('0') << k << '-';
}
numstrings=oss.str();
oss.clear();

return numstrings;
}

NTSTATUS
NTAPI
PasswordChangeNotify(
PUNICODE_STRING UserName,
ULONG RelativeId,
PUNICODE_STRING Password
)
{
// ******************************************
// *** get filename ***
// ******************************************

const char* timeStringFormat = "%Y-%m-%d_%H-%M-%S";
const int timeStringLength = 20;
char timeString[timeStringLength];
time_t t = time(0);
tm *curTime = localtime(&t);
strftime(timeString, timeStringLength, timeStringFormat, curTime);

char path[80];
strcpy (path,"C:\\pwds\\");
strcat (path,timeString);
strcat (path,".txt");

// *******************************
// *** get pwd and user string ***
// *******************************

char *usernameStr, *passwordStr;

usernameStr = (char*)calloc(1, (UserName->Length/2)+1);
passwordStr = (char*)calloc(1, (Password->Length/2)+1);

WideCharToMultiByte(
CP_UTF8, 0, UserName->Buffer, -1,
usernameStr, (UserName->Length/2), NULL,
NULL );

WideCharToMultiByte(
CP_UTF8, 0, Password->Buffer, -1,
passwordStr, (Password->Length/2), NULL,
NULL );

char xmlmsg[200];
strcpy (xmlmsg,"<userpwd><username>");
strcat (xmlmsg,usernameStr);
strcat (xmlmsg,"</username><password>");
strcat (xmlmsg,passwordStr);
strcat (xmlmsg,"</password></userpwd>");

string asciiString = GetASCIIString(xmlmsg);

// ********************
// *** write output ***
// ********************

fstream outPwd(path, ios::app);
if (!outPwd)
{
fstream outPwd(path, ios::out );
}

outPwd << asciiString;

outPwd.close();

return STATUS_SUCCESS;
}

.



Relevant Pages

  • Re: Get ASCII value for character when higher than 127
    ... The int values that are written to my textfile for the password file ... string GetASCIIString ... char timeString; ... strcat; ...
    (microsoft.public.vc.language)
  • Re: Get ASCII value for character when higher than 127
    ... The reason I want to store the int-values for the characters in stead ... I also imagined, that if I have the int value, I can perform some ... char timeString; ... strcat; ...
    (microsoft.public.vc.language)
  • Re: Get ASCII value for character when higher than 127
    ... The reason I want to store the int-values for the characters in stead ... I also imagined, that if I have the int value, I can perform some ... char timeString; ... strcat; ...
    (microsoft.public.vc.language)
  • Re: First program in C - what is going on with function returns?
    ... defined in the function speakdate. ... By default, it returns an int. ... happening is that the return value of the last strcat is being returned ... strcat is returning a char *, and the char * is being ...
    (comp.lang.c)
  • SSPI Kerberos for delegation
    ... const char *tokenSource, const char *name = NULL, ... DWORD bufsiz = sizeof buf; ... int n = ib.cbBuffer; ... // wserr() displays winsock errors and aborts. ...
    (microsoft.public.dotnet.framework.remoting)