Changeset 107903 in vbox for trunk/src/VBox/GuestHost/installation/VBoxWinDrvStore.cpp
- Timestamp:
- Jan 22, 2025 11:03:23 PM (3 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/installation/VBoxWinDrvStore.cpp
r106890 r107903 119 119 * Duplicates a Windows driver store entry. 120 120 * 121 * @returns Duplicated Windows driver store entry. 121 * @returns Duplicated Windows driver store entry. Caller must correct 122 * VBOXWINDRVSTOREENTRY::Node (list entry) immediately. 122 123 * @param pEntry Windows driver store list to duplicate. 123 124 */ 124 PVBOXWINDRVSTOREENTRY vboxWinDrvStoreEntryDup(PVBOXWINDRVSTOREENTRY pEntry)125 static PVBOXWINDRVSTOREENTRY vboxWinDrvStoreEntryDup(PVBOXWINDRVSTOREENTRY pEntry) 125 126 { 126 127 return (PVBOXWINDRVSTOREENTRY)RTMemDup(pEntry, sizeof(VBOXWINDRVSTOREENTRY)); … … 132 133 * @param pList Windows driver store list to initialize. 133 134 */ 134 void vboxWinDrvStoreListInit(PVBOXWINDRVSTORELIST pList)135 static void vboxWinDrvStoreListInit(PVBOXWINDRVSTORELIST pList) 135 136 { 136 137 RT_BZERO(pList, sizeof(VBOXWINDRVSTORELIST)); … … 145 146 * @param ppList Where to return the created Windows driver store list on success. 146 147 */ 147 int vboxWinDrvStoreListCreate(PVBOXWINDRVSTORELIST *ppList)148 static int vboxWinDrvStoreListCreate(PVBOXWINDRVSTORELIST *ppList) 148 149 { 149 150 PVBOXWINDRVSTORELIST pList = (PVBOXWINDRVSTORELIST)RTMemAlloc(sizeof(VBOXWINDRVSTORELIST)); … … 163 164 * The pointer will be invalid after return. 164 165 */ 165 void vboxWinDrvStoreListDestroy(PVBOXWINDRVSTORELIST pList)166 static void vboxWinDrvStoreListDestroy(PVBOXWINDRVSTORELIST pList) 166 167 { 167 168 if (!pList) … … 227 228 * @param pList Driver store list to query. 228 229 * @param enmType Query type. 229 * @param p vTypeQuery data. Must match \a enmType.230 * @param pszTypeConst Query data. Must match \a enmType. 230 231 * @param ppListResults Where to return found results on success. 231 232 * Must be destroyed with VBoxWinDrvStoreListFree(). 232 233 */ 233 static int vboxWinDrvStoreListQueryEx(PVBOXWINDRVSTORELIST pList, VBOXWINDRVSTORELISTQUERYTYPE enmType, const void *pvType,234 static int vboxWinDrvStoreListQueryEx(PVBOXWINDRVSTORELIST pList, VBOXWINDRVSTORELISTQUERYTYPE enmType, const char *pszTypeConst, 234 235 PVBOXWINDRVSTORELIST *ppListResults) 235 236 { … … 240 241 /* Currently all query types require strings, so do this for all query times for now. */ 241 242 char *pszType = NULL; 242 if (p vType)243 { 244 AssertReturn(RTStrIsValidEncoding( (const char *)pvType), VERR_INVALID_PARAMETER);245 pszType = RTStrDup( (const char *)pvType);243 if (pszTypeConst) 244 { 245 AssertReturn(RTStrIsValidEncoding(pszTypeConst), VERR_INVALID_PARAMETER); 246 pszType = RTStrDup(pszTypeConst); 246 247 AssertPtrReturnStmt(pszType, VBoxWinDrvStoreListFree(pListResults), VERR_NO_MEMORY); 247 } 248 249 PRTUTF16 papszHaystacks[4] = { NULL }; /* Array of haystacks to search in. */250 size_t cHaystacks = 0; /* Number of haystacks to search in, zero-based. */248 249 /* Convert strings to lowercase, as RTStrSimplePatternMatch() is case sensitive. */ 250 RTStrToLower(pszType); 251 } 251 252 252 253 PVBOXWINDRVSTOREENTRY pCur; … … 255 256 bool fFound = false; 256 257 if (pszType == NULL) /* No query type specified? Then directly add the entry to the list. */ 257 {258 258 fFound = true; 259 }260 259 else 261 260 { 261 PRTUTF16 apszHaystacks[3] = {}; /* Array of haystacks to search in. */ 262 size_t cHaystacks = 0; /* Number of haystacks to search in, zero-based. */ 262 263 switch (enmType) 263 264 { 264 265 case VBOXWINDRVSTORELISTQUERYTYPE_PNP_ID: 265 266 { 266 papszHaystacks[cHaystacks++] = pCur->wszPnpId;267 apszHaystacks[cHaystacks++] = pCur->wszPnpId; 267 268 break; 268 269 } 269 270 case VBOXWINDRVSTORELISTQUERYTYPE_MODEL_NAME: 270 271 { 271 papszHaystacks[cHaystacks++] = pCur->wszModel;272 apszHaystacks[cHaystacks++] = pCur->wszModel; 272 273 break; 273 274 } 274 275 case VBOXWINDRVSTORELISTQUERYTYPE_DRIVER_NAME: 275 276 { 276 papszHaystacks[cHaystacks++] = pCur->wszDriverName;277 apszHaystacks[cHaystacks++] = pCur->wszDriverName; 277 278 break; 278 279 } 279 280 case VBOXWINDRVSTORELISTQUERYTYPE_ANY: 280 281 { 281 papszHaystacks[cHaystacks++] = pCur->wszPnpId;282 papszHaystacks[cHaystacks++] = pCur->wszModel;283 papszHaystacks[cHaystacks++] = pCur->wszDriverName;282 apszHaystacks[cHaystacks++] = pCur->wszPnpId; 283 apszHaystacks[cHaystacks++] = pCur->wszModel; 284 apszHaystacks[cHaystacks++] = pCur->wszDriverName; 284 285 break; 285 286 } … … 289 290 break; 290 291 } 291 292 292 if (RT_FAILURE(rc)) 293 293 break; 294 294 295 Assert(cHaystacks <= RT_ELEMENTS(apszHaystacks)); 295 296 for (size_t i = 0; i < cHaystacks; i++) 296 297 { 297 298 /* Slow, but does the job for now. */ 298 299 char *pszHaystack; 299 rc = RTUtf16ToUtf8( papszHaystacks[i], &pszHaystack);300 rc = RTUtf16ToUtf8(apszHaystacks[i], &pszHaystack); 300 301 if (RT_SUCCESS(rc)) 301 302 { 302 /* Convert strings to lowercase first, as RTStrSimplePatternMatch() is case sensitive. */303 RTStrToLower(pszType);304 303 RTStrToLower(pszHaystack); 305 304 … … 322 321 AssertFailedBreakStmt(rc = VERR_NO_MEMORY); 323 322 } 324 325 cHaystacks = 0;326 323 } 327 324 … … 528 525 * @returns VBox status code. 529 526 * @param pDrvStore Driver store to query. 530 * @param pszPattern Pattern to query for. DOS-style wildcards supported.527 * @param pszPattern Pattern (RTStrSimplePatternMatch) to query for. 531 528 * @param ppResults Where to return the results list on success. 532 529 * Must be free'd with VBoxWinDrvStoreListFree(). … … 555 552 * @returns VBox status code. 556 553 * @param pDrvStore Driver store to query. 557 * @param pszPnpId PnP ID to query. DOS-style wildcards supported. 554 * @param pszPnpId PnP ID pattern (RTStrSimplePatternMatch) to 555 * query. 558 556 * @param ppResults Where to return the results list on success. 559 557 * Must be free'd with VBoxWinDrvStoreListFree(). … … 561 559 int VBoxWinDrvStoreQueryByPnpId(PVBOXWINDRVSTORE pDrvStore, const char *pszPnpId, PVBOXWINDRVSTORELIST *ppResults) 562 560 { 563 return vboxWinDrvStoreListQueryEx(&pDrvStore->lstDrivers, VBOXWINDRVSTORELISTQUERYTYPE_PNP_ID, (const char *)pszPnpId, 564 ppResults); 561 return vboxWinDrvStoreListQueryEx(&pDrvStore->lstDrivers, VBOXWINDRVSTORELISTQUERYTYPE_PNP_ID, pszPnpId, ppResults); 565 562 } 566 563 … … 570 567 * @returns VBox status code. 571 568 * @param pDrvStore Driver store to query. 572 * @param pszPnpId Model name to query. DOS-style wildcards supported. 569 * @param pszPnpId Model name pattern (RTStrSimplePatternMatch) to 570 * query. 573 571 * @param ppResults Where to return the results list on success. 574 572 * Must be free'd with VBoxWinDrvStoreListFree(). … … 576 574 int VBoxWinDrvStoreQueryByModelName(PVBOXWINDRVSTORE pDrvStore, const char *pszModelName, PVBOXWINDRVSTORELIST *ppResults) 577 575 { 578 return vboxWinDrvStoreListQueryEx(&pDrvStore->lstDrivers, VBOXWINDRVSTORELISTQUERYTYPE_MODEL_NAME, (const char *)pszModelName, 579 ppResults); 576 return vboxWinDrvStoreListQueryEx(&pDrvStore->lstDrivers, VBOXWINDRVSTORELISTQUERYTYPE_MODEL_NAME, pszModelName, ppResults); 580 577 } 581 578
Note:
See TracChangeset
for help on using the changeset viewer.