Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// Password.cpp : Implementation of CPassword
#include "stdafx.h"
#include "ScriptPW.h"
#include "Password.h"
#include <conio.h>
#define MAX_PASSWORD_SIZE 256
#define CARRIAGE_RETURN 0x0D
/////////////////////////////////////////////////////////////////////////////
// CPassword
STDMETHODIMP CPassword::GetPassword(BSTR *bstrOutPassword) { // TODO: Add your implementation code here
HANDLE hConsoleInput; TCHAR *tstrPassword; TCHAR wch; int i=0;
DWORD nNumberOfCharsToRead=1; DWORD dwNumberOfCharsRead; DWORD dwPrevConsoleMode;
hConsoleInput = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(hConsoleInput, &dwPrevConsoleMode); if(!SetConsoleMode(hConsoleInput,ENABLE_PROCESSED_INPUT)) return E_FAIL; tstrPassword = (TCHAR *)malloc(MAX_PASSWORD_SIZE * sizeof(TCHAR));
if(tstrPassword == NULL) return E_FAIL;
while(1) { if(!ReadConsole(hConsoleInput, // handle to console input buffer
&wch, // data buffer
nNumberOfCharsToRead, // number of characters to read
&dwNumberOfCharsRead, // number of characters read
NULL)) { //Set the original console settings
SetConsoleMode(hConsoleInput, dwPrevConsoleMode); //Free the memory
if(tstrPassword) free(tstrPassword); return E_FAIL;
} if(wch == CARRIAGE_RETURN) break; *(tstrPassword+i) = wch; i++; if(i == MAX_PASSWORD_SIZE) break; }
*(tstrPassword+i) = _T('\0');
CComBSTR bstrPassword(tstrPassword); *bstrOutPassword = bstrPassword.Copy();
//Set the original console settings
SetConsoleMode(hConsoleInput, dwPrevConsoleMode);
//Free the memory
if(tstrPassword) free(tstrPassword);
return S_OK; }
|