XP の RSAENH.DLL が Windows 2000で使えない理由と USERENV.DLL
Windows XP の RSAENH を 拡張カーネル v15jで使おうとすると、UserEnv.dll と Advapi32.dll の不正アクセスでDLLの初期化に失敗します
これはなんでか調べてみました
具体的にどこで問題が発生しているかというと
L680234B0: lea eax,[ebp-0000041Ch] push eax push 0000000Ch call SUB_L68022047 cmp eax,edi jnz L680234D9 lea eax,[ebp-00000210h] push eax push [ebp-0000041Ch] call [USERENV_dll_DelayImport_Ord.149] cmp eax,edi jz L680234E0 L680234D9: |
ここで、例外が発生して例外処理にスローされます
関数名 | 2000 | XP |
? | (162[3]) | (148[2]) |
? | (163[3]) | (149[2]) |
CheckXForestLogon | (175) | 159 |
CreateEnvironmentBlock | 132 | 160 |
DeleteProfileA | 133 | 161 |
DeleteProfileW | 134 | 162 |
DestroyEnvironmentBlock | 135 | 163 |
DllCanUnloadNow | 164 | |
DllGetClassObject | 165 | |
DllInstall | 166 | |
DllRegisterServer | 167 | |
DllUnregisterServer | 168 | |
EnterCriticalPolicySection | 136 | 169 |
ExpandEnvironmentStringsForUserA | 137 | 170 |
ExpandEnvironmentStringsForUserW | 138 | 171 |
ForceSyncFgPolicy | 172 | |
FreeGPOListA | 139 | 173 |
FreeGPOListW | 140 | 174 |
GenerateRsopPolicy | 175 | |
GetAllUsersProfileDirectoryA | 141 | 176 |
GetAllUsersProfileDirectoryW | 142 | 177 |
GetAppliedGPOListA | 143 | 178 |
GetAppliedGPOListW | 144 | 179 |
GetDefaultUserProfileDirectoryA | 145 | 180 |
GetDefaultUserProfileDirectoryW | 146 | 181 |
GetGPOListA | 147 | 182 |
GetGPOListW | 148 | 183 |
GetNextFgPolicyRefreshInfo | 184 | |
GetPreviousFgPolicyRefreshInfo | 185 | |
GetProfileType | 149 | 186 |
GetProfilesDirectoryA | 150 | 187 |
GetProfilesDirectoryW | 151 | 188 |
GetUserProfileDirectoryA | 152 | 189 |
GetUserProfileDirectoryW | 153 | 190 |
LeaveCriticalPolicySection | 154 | 191 |
LoadUserProfileA | 155 | 192 |
LoadUserProfileW | 156 | 193 |
ProcessGroupPolicyCompleted | 157 | 194 |
ProcessGroupPolicyCompletedEx | 195 | |
RefreshPolicy | 158 | 196 |
RefreshPolicyEx | 197 | |
RegisterGPNotification | 159 | 198 |
RsopAccessCheckByType | 199 | |
RsopFileAccessCheck | 202 | |
RsopLoggingEnabled | 203 | |
RsopResetPolicySettingStatus | 204 | |
RsopSetPolicySettingStatus | 205 | |
UnloadUserProfile | 160 | 206 |
UnregisterGPNotification | 161 | 207 |
WaitForMachinePolicyForegroundProcessing | - | 208 |
WaitForUserPolicyForegroundProcessing | - | 209 |
ついでにXPには未定義関数 100~158, 200/201
2000には 100~131,162,163,175 があります
2000では、CheckXForestLogon は隠し関数の175で
引数が2つあるXPの Ord.148/149は 引数が3つの Ord.162/163関数と互換性があるようです。
違いは Ord.162/163 の第2パラメータがフラグと使用されていて、0以外の時 Local AppData を使用。 通常は XP と互換の AppData を使用します。
Comments