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