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.
|
|
/*++
Copyright (c) 2000-2001 Microsoft Corporation
Module Name:
HandleDBCSUserName2.cpp
Abstract:
Disable DBCS handling for CharNextA if the string is DBCS user profile for non-DBCS enabled application support.
More info:
Return next byte address instead of next character address.
History:
05/01/2001 geoffguo Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(HandleDBCSUserName2) #include "ShimHookMacro.h"
#define MAX_USERNAME 256
//
// Add APIs that you wish to hook to this macro construction.
//
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(CharNextA) APIHOOK_ENUM_END
//
// Checking if the string is user profile path
//
BOOL IsUserProfilePath( LPCSTR lpCurrentChar) { LPSTR lpChar = (LPSTR)lpCurrentChar; BOOL bRet = FALSE; char szBuf[10];
while (lpChar != NULL && *lpChar != (char)NULL && (lpCurrentChar - lpChar) < MAX_USERNAME+25) { //to find ":\Documents and Settings" (short name is :\DOCUME~1) in path
if (*lpChar == (char) ':') { lstrcpynA (szBuf, lpChar, 9); szBuf[8] = (char) NULL; if (lstrcmpiA (szBuf, ":\\DOCUME") == 0) { bRet = TRUE; break; } } lpChar--; }
return bRet; }
//
// Disable DBCS handling for CharNextA
//
LPSTR APIHOOK(CharNextA)( LPCSTR lpCurrentChar) { if (lpCurrentChar != NULL && *lpCurrentChar != (char)NULL) { // Disable DBCS support for DBCS username in user profile path
if (IsDBCSLeadByte(*lpCurrentChar) && !IsUserProfilePath(lpCurrentChar)) lpCurrentChar++;
lpCurrentChar++; }
return (LPSTR)lpCurrentChar; }
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(USER32.DLL, CharNextA)
HOOK_END
IMPLEMENT_SHIM_END
|