OLD | NEW |
1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
2 | 2 |
3 #include "PluginClass.h" | 3 #include "PluginClass.h" |
4 #include "PluginSettings.h" | 4 #include "PluginSettings.h" |
5 #include "PluginSystem.h" | 5 #include "PluginSystem.h" |
6 #include "PluginFilter.h" | 6 #include "PluginFilter.h" |
7 #include "PluginMimeFilterClient.h" | 7 #include "PluginMimeFilterClient.h" |
8 #include "PluginClient.h" | 8 #include "PluginClient.h" |
9 #include "PluginClientFactory.h" | 9 #include "PluginClientFactory.h" |
10 #include "PluginMutex.h" | 10 #include "PluginMutex.h" |
(...skipping 1135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1146 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); | 1146 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); |
1147 | 1147 |
1148 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); | 1148 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); |
1149 | 1149 |
1150 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); | 1150 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); |
1151 | 1151 |
1152 SetMenuBar(hMenuTrackPopup, url); | 1152 SetMenuBar(hMenuTrackPopup, url); |
1153 | 1153 |
1154 return hMenuTrackPopup; | 1154 return hMenuTrackPopup; |
1155 } | 1155 } |
1156 BOOL CreateLowProcess(WCHAR* wszProcessName, WCHAR* cmdLine) | |
1157 { | |
1158 | |
1159 BOOL fRet; | |
1160 HANDLE hToken = NULL; | |
1161 HANDLE hNewToken = NULL; | |
1162 PSID pIntegritySid = NULL; | |
1163 TOKEN_MANDATORY_LABEL TIL = {0}; | |
1164 PROCESS_INFORMATION ProcInfo = {0}; | |
1165 STARTUPINFO StartupInfo = {0}; | |
1166 | |
1167 | |
1168 | |
1169 // Low integrity SID | |
1170 WCHAR wszIntegritySid[20] = L"S-1-16-4096"; | |
1171 | |
1172 | |
1173 fRet = OpenProcessToken(GetCurrentProcess(), | |
1174 TOKEN_DUPLICATE | | |
1175 TOKEN_ADJUST_DEFAULT | | |
1176 TOKEN_QUERY | | |
1177 TOKEN_ASSIGN_PRIMARY, | |
1178 &hToken); | |
1179 | |
1180 if (!fRet) | |
1181 { | |
1182 goto CleanExit; | |
1183 } | |
1184 | |
1185 fRet = DuplicateTokenEx(hToken, | |
1186 0, | |
1187 NULL, | |
1188 SecurityImpersonation, | |
1189 TokenPrimary, | |
1190 &hNewToken); | |
1191 | |
1192 if (!fRet) | |
1193 { | |
1194 goto CleanExit; | |
1195 } | |
1196 | |
1197 fRet = ConvertStringSidToSid(wszIntegritySid, &pIntegritySid); | |
1198 | |
1199 if (!fRet) | |
1200 { | |
1201 goto CleanExit; | |
1202 } | |
1203 | |
1204 | |
1205 TIL.Label.Attributes = SE_GROUP_INTEGRITY; | |
1206 TIL.Label.Sid = pIntegritySid; | |
1207 | |
1208 | |
1209 // | |
1210 // Set the process integrity level | |
1211 // | |
1212 | |
1213 fRet = SetTokenInformation(hNewToken, | |
1214 TokenIntegrityLevel, | |
1215 &TIL, | |
1216 sizeof(TOKEN_MANDATORY_LABEL) + GetLengthSid(pIntegritySid)); | |
1217 | |
1218 if (!fRet) | |
1219 { | |
1220 goto CleanExit; | |
1221 } | |
1222 | |
1223 // | |
1224 // Create the new process at Low integrity | |
1225 // | |
1226 | |
1227 fRet = CreateProcessAsUser(hNewToken, | |
1228 wszProcessName, | |
1229 cmdLine, | |
1230 NULL, | |
1231 NULL, | |
1232 FALSE, | |
1233 0, | |
1234 NULL, | |
1235 NULL, | |
1236 &StartupInfo, | |
1237 &ProcInfo); | |
1238 | |
1239 | |
1240 CleanExit: | |
1241 | |
1242 if (ProcInfo.hProcess != NULL) | |
1243 { | |
1244 CloseHandle(ProcInfo.hProcess); | |
1245 } | |
1246 | |
1247 if (ProcInfo.hThread != NULL) | |
1248 { | |
1249 CloseHandle(ProcInfo.hThread); | |
1250 } | |
1251 | |
1252 LocalFree(pIntegritySid); | |
1253 | |
1254 if (hNewToken != NULL) | |
1255 { | |
1256 CloseHandle(hNewToken); | |
1257 } | |
1258 | |
1259 if (hToken != NULL) | |
1260 { | |
1261 CloseHandle(hToken); | |
1262 } | |
1263 | |
1264 return fRet; | |
1265 } | |
1266 | 1156 |
1267 void CPluginClass::DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, U
INT nMenuFlags) | 1157 void CPluginClass::DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, U
INT nMenuFlags) |
1268 { | 1158 { |
1269 CPluginClient* client = CPluginClient::GetInstance(); | 1159 CPluginClient* client = CPluginClient::GetInstance(); |
1270 | 1160 |
1271 // Create menu parent window | 1161 // Create menu parent window |
1272 HWND hMenuWnd = ::CreateWindowEx( | 1162 HWND hMenuWnd = ::CreateWindowEx( |
1273 NULL, | 1163 NULL, |
1274 MAKEINTATOM(GetAtomPaneClass()), | 1164 MAKEINTATOM(GetAtomPaneClass()), |
1275 L"", | 1165 L"", |
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1975 } | 1865 } |
1976 } | 1866 } |
1977 } | 1867 } |
1978 | 1868 |
1979 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); | 1869 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); |
1980 } | 1870 } |
1981 | 1871 |
1982 return hTabWnd; | 1872 return hTabWnd; |
1983 | 1873 |
1984 } | 1874 } |
OLD | NEW |