MCPcopy Create free account
hub / github.com/NullArray/WinKernel-Resources / CopyMultiSz

Function CopyMultiSz

Drivers/Driver-SRC/setup/devcon/devcon.cpp:403–464  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

401
402__drv_allocatesMem(object)
403LPTSTR * CopyMultiSz(_In_opt_ PZPWSTR Array)
404/*++
405
406Routine Description:
407
408 Creates a new array from old
409 old array need not have been allocated by GetMultiSzIndexArray
410
411Arguments:
412
413 Array - array of strings, last entry is NULL
414
415Return Value:
416
417 MultiSz array allocated by GetMultiSzIndexArray
418
419--*/
420{
421 LPTSTR multiSz = NULL;
422 HRESULT hr;
423 int cchMultiSz = 0;
424 int c;
425 if(Array) {
426 for(c=0;Array[c];c++) {
427 cchMultiSz+=(int)_tcslen(Array[c])+1;
428 }
429 }
430 cchMultiSz+=1; // final Null
431 multiSz = new TCHAR[cchMultiSz];
432 if(!multiSz) {
433 return NULL;
434 }
435 int len = 0;
436 if(Array) {
437 for(c=0;Array[c];c++) {
438 hr = StringCchCopy(multiSz+len,cchMultiSz-len,Array[c]);
439 if(FAILED(hr)){
440 if(multiSz)
441 delete [] multiSz;
442 return NULL;
443 }
444
445#pragma prefast(suppress:__WARNING_BUFFER_OVERFLOW, "ESP:732")
446 len+=(int)_tcslen(multiSz+len)+1;
447 }
448 }
449
450 if( len < cchMultiSz ){
451 multiSz[len] = TEXT('\0');
452 } else {
453 // This should never happen!
454 multiSz[cchMultiSz-1] = TEXT('\0');
455 }
456
457 LPTSTR * pRes = GetMultiSzIndexArray(multiSz);
458 if(pRes) {
459 return pRes;
460 }

Callers 2

cmdClassFilterFunction · 0.85
SetHwidCallbackFunction · 0.85

Calls 1

GetMultiSzIndexArrayFunction · 0.85

Tested by

no test coverage detected