Changeset 70194 in vbox for trunk/src/VBox
- Timestamp:
- Dec 18, 2017 1:39:39 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 119768
- Location:
- trunk/src/VBox/Additions/common/VBoxGuest
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxGuest/Makefile.kmk
r70180 r70194 157 157 VBoxGuest.cpp_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) 158 158 159 ifeq ($(KBUILD_TARGET),win) 160 ## 161 ## Windows NT4 driver. 162 ## 163 #SYSMODS.x86 += VBoxGuestNT 164 #VBoxGuestNT_EXTENDS = VBoxGuest 165 #VBoxGuestNT_INSTTYPE.win = both 166 #VBoxGuestNT_SDKS = ReorderCompilerIncs $(VBOX_WINDDK_GST_NT4) 167 #VBoxGuestNT_DEFS = $(VBoxGuest_DEFS) TARGET_NT4 168 #VBoxGuestNT_SOURCES = \ 169 # VBoxGuest.cpp \ 170 # VBoxGuest-$(KBUILD_TARGET).cpp \ 171 # win/VBoxGuest.rc 172 #VBoxGuestNT_LIBS = \ 173 # $(PATH_SDK_$(VBOX_WINDDK_GST_NT4)_LIB)/exsup.lib \ 174 # $(PATH_SDK_$(VBOX_WINDDK_GST_NT4)_LIB)/ntoskrnl.lib \ 175 # $(PATH_SDK_$(VBOX_WINDDK_GST_NT4)_LIB)/hal.lib \ 176 # $(VBOX_LIB_VBGL_R0BASE) \ 177 # $(VBOX_LIB_IPRT_GUEST_R0_NT4) 159 if "$(KBUILD_TARGET)" == "win" && 1 160 # 161 # Windows NT 3.x driver. 162 # 163 SYSMODS.x86 += VBoxGuestNT3 164 VBoxGuestNT3_EXTENDS = VBoxGuest 165 VBoxGuestNT3_INSTTYPE.win = both 166 VBoxGuestNT3_SDKS = ReorderCompilerIncs $(VBOX_WINDDK_GST_NT4) 167 VBoxGuestNT3_DEFS = $(VBoxGuest_DEFS) TARGET_NT4 TARGET_NT3 RT_WITHOUT_NOCRT_WRAPPERS 168 VBoxGuestNT3_SOURCES = \ 169 VBoxGuest.cpp \ 170 VBoxGuest-$(KBUILD_TARGET).cpp \ 171 ../../../Runtime/common/string/strcmp.asm \ 172 ../../../Runtime/common/string/strchr.asm \ 173 ../../../Runtime/r0drv/nt/nt3fakes-r0drv-nt.cpp \ 174 ../../../Runtime/r0drv/nt/nt3fakesA-r0drv-nt.asm \ 175 win/VBoxGuest.rc 176 VBoxGuestNT3_LIBS = \ 177 $(VBOX_LIB_IPRT_GUEST_R0_NT4) \ 178 $(PATH_SDK_$(VBOX_WINDDK_GST_NT4)_LIB)/exsup.lib \ 179 $(PATH_SDK_$(VBOX_WINDDK_GST_NT4)_LIB)/int64.lib \ 180 $(PATH_SDK_$(VBOX_WINDDK_GST_NT4)_LIB)/ntoskrnl.lib \ 181 $(PATH_SDK_$(VBOX_WINDDK_GST_NT4)_LIB)/hal.lib \ 182 $(VBOX_LIB_VBGL_R0BASE) 178 183 endif # win 179 184 endif # enabled -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
r70158 r70194 49 49 * Defined Constants And Macros * 50 50 *********************************************************************************************************************************/ 51 #undef ExFreePool 52 51 53 #ifndef PCI_MAX_BUSES 52 54 # define PCI_MAX_BUSES 256 … … 161 163 { 162 164 VGDRVNTVER_INVALID = 0, 165 VGDRVNTVER_WINNT31, 166 VGDRVNTVER_WINNT350, 167 VGDRVNTVER_WINNT351, 163 168 VGDRVNTVER_WINNT4, 164 169 VGDRVNTVER_WIN2K, … … 332 337 g_enmVGDrvNtVer = VGDRVNTVER_WINNT4; 333 338 break; 339 case 3: 340 if (ulMinorVer > 50) 341 g_enmVGDrvNtVer = VGDRVNTVER_WINNT351; 342 else if (ulMinorVer >= 50) 343 g_enmVGDrvNtVer = VGDRVNTVER_WINNT350; 344 else 345 g_enmVGDrvNtVer = VGDRVNTVER_WINNT31; 346 break; 334 347 default: 335 348 if (ulMajorVer > 6) … … 426 439 switch (enmNtVer) 427 440 { 441 case VGDRVNTVER_WINNT31: 442 case VGDRVNTVER_WINNT350: 443 case VGDRVNTVER_WINNT351: 428 444 case VGDRVNTVER_WINNT4: 429 445 enmOsType = VBOXOSTYPE_WinNT4; … … 505 521 * @param pResourceList list of device resources. 506 522 */ 507 static void vgdrvNtShowDeviceResources(PCM_PARTIAL_RESOURCE_LIST pResourceList) 508 { 509 PCM_PARTIAL_RESOURCE_DESCRIPTOR pResource = pResourceList->PartialDescriptors; 510 ULONG cResources = pResourceList->Count; 511 512 for (ULONG i = 0; i < cResources; ++i, ++pResource) 513 { 514 ULONG uType = pResource->Type; 515 static char const * const s_apszName[] = 516 { 517 "CmResourceTypeNull", 518 "CmResourceTypePort", 519 "CmResourceTypeInterrupt", 520 "CmResourceTypeMemory", 521 "CmResourceTypeDma", 522 "CmResourceTypeDeviceSpecific", 523 "CmResourceTypeuBusNumber", 524 "CmResourceTypeDevicePrivate", 525 "CmResourceTypeAssignedResource", 526 "CmResourceTypeSubAllocateFrom", 527 }; 528 529 LogFunc(("Type=%s", uType < RT_ELEMENTS(s_apszName) ? s_apszName[uType] : "Unknown")); 530 531 switch (uType) 532 { 533 case CmResourceTypePort: 534 case CmResourceTypeMemory: 535 LogFunc(("Start %8X%8.8lX, length=%X\n", 536 pResource->u.Port.Start.HighPart, pResource->u.Port.Start.LowPart, pResource->u.Port.Length)); 537 break; 538 539 case CmResourceTypeInterrupt: 540 LogFunc(("Level=%X, vector=%X, affinity=%X\n", 541 pResource->u.Interrupt.Level, pResource->u.Interrupt.Vector, pResource->u.Interrupt.Affinity)); 542 break; 543 544 case CmResourceTypeDma: 545 LogFunc(("Channel %d, Port %X\n", pResource->u.Dma.Channel, pResource->u.Dma.Port)); 546 break; 547 548 default: 549 LogFunc(("\n")); 550 break; 523 static void vgdrvNtShowDeviceResources(PCM_RESOURCE_LIST pRsrcList) 524 { 525 for (uint32_t iList = 0; iList < pRsrcList->Count; iList++) 526 { 527 PCM_FULL_RESOURCE_DESCRIPTOR pList = &pRsrcList->List[iList]; 528 LogFunc(("List #%u: InterfaceType=%#x BusNumber=%#x ListCount=%u ListRev=%#x ListVer=%#x\n", 529 iList, pList->InterfaceType, pList->BusNumber, pList->PartialResourceList.Count, 530 pList->PartialResourceList.Revision, pList->PartialResourceList.Version )); 531 532 PCM_PARTIAL_RESOURCE_DESCRIPTOR pResource = pList->PartialResourceList.PartialDescriptors; 533 for (ULONG i = 0; i < pList->PartialResourceList.Count; ++i, ++pResource) 534 { 535 ULONG uType = pResource->Type; 536 static char const * const s_apszName[] = 537 { 538 "CmResourceTypeNull", 539 "CmResourceTypePort", 540 "CmResourceTypeInterrupt", 541 "CmResourceTypeMemory", 542 "CmResourceTypeDma", 543 "CmResourceTypeDeviceSpecific", 544 "CmResourceTypeuBusNumber", 545 "CmResourceTypeDevicePrivate", 546 "CmResourceTypeAssignedResource", 547 "CmResourceTypeSubAllocateFrom", 548 }; 549 550 if (uType < RT_ELEMENTS(s_apszName)) 551 LogFunc((" %.30s Flags=%#x Share=%#x", s_apszName[uType], pResource->Flags, pResource->ShareDisposition)); 552 else 553 LogFunc((" Type=%#x Flags=%#x Share=%#x", uType, pResource->Flags, pResource->ShareDisposition)); 554 switch (uType) 555 { 556 case CmResourceTypePort: 557 case CmResourceTypeMemory: 558 Log((" Start %#RX64, length=%#x\n", pResource->u.Port.Start.QuadPart, pResource->u.Port.Length)); 559 break; 560 561 case CmResourceTypeInterrupt: 562 Log((" Level=%X, vector=%#x, affinity=%#x\n", 563 pResource->u.Interrupt.Level, pResource->u.Interrupt.Vector, pResource->u.Interrupt.Affinity)); 564 break; 565 566 case CmResourceTypeDma: 567 Log((" Channel %d, Port %#x\n", pResource->u.Dma.Channel, pResource->u.Dma.Port)); 568 break; 569 570 default: 571 Log(("\n")); 572 break; 573 } 551 574 } 552 575 } … … 582 605 RtlInitUnicodeString(&ClassName, L"VBoxGuestAdapter"); 583 606 PCM_RESOURCE_LIST pResourceList = NULL; 584 rcNt = HalAssignSlotResources(pRegPath, &ClassName, pDrvObj, pDevObj, 585 PCIBus, pDevExt->uBus, pDevExt->uSlot,&pResourceList);607 rcNt = HalAssignSlotResources(pRegPath, &ClassName, pDrvObj, pDevObj, PCIBus, pDevExt->uBus, pDevExt->uSlot, 608 &pResourceList); 586 609 # ifdef LOG_ENABLED 587 if (pResourceList && pResourceList->Count > 0)588 vgdrvNtShowDeviceResources( &pResourceList->List[0].PartialResourceList);610 if (pResourceList) 611 vgdrvNtShowDeviceResources(pResourceList); 589 612 # endif 590 613 if (NT_SUCCESS(rcNt)) 614 { 591 615 rcNt = vgdrvNtScanPCIResourceList(pResourceList, pDevExt); 616 ExFreePool(pResourceList); 617 } 618 592 619 # else /* !TARGET_NT4 */ 593 620 AssertFailed(); … … 603 630 PIO_STACK_LOCATION pStack = IoGetCurrentIrpStackLocation(pIrp); 604 631 # ifdef LOG_ENABLED 605 if (pStack->Parameters.StartDevice.AllocatedResources->Count > 0) 606 vgdrvNtShowDeviceResources(&pStack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList); 632 vgdrvNtShowDeviceResources(pStack->Parameters.StartDevice.AllocatedResources); 607 633 # endif 608 634 rcNt = vgdrvNtScanPCIResourceList(pStack->Parameters.StartDevice.AllocatedResourcesTranslated, pDevExt); … … 826 852 * @returns NT status code. 827 853 * 828 * @param pu luBusNumberWhere to return the bus number on success.829 * @param p uSlotNumberWhere to return the slot number on success.830 */ 831 static NTSTATUS vgdrvNt4FindPciDevice(PULONG pu luBusNumber, PPCI_SLOT_NUMBER puSlotNumber)854 * @param puBus Where to return the bus number on success. 855 * @param pSlot Where to return the slot number on success. 856 */ 857 static NTSTATUS vgdrvNt4FindPciDevice(PULONG puBus, PPCI_SLOT_NUMBER pSlot) 832 858 { 833 859 Log(("vgdrvNt4FindPciDevice\n")); 834 860 835 PCI_SLOT_NUMBER uSlot;836 uSlot.u.AsULONG = 0;861 PCI_SLOT_NUMBER Slot; 862 Slot.u.AsULONG = 0; 837 863 838 864 /* Scan each bus. */ 839 for (ULONG u luBusNumber = 0; uluBusNumber < PCI_MAX_BUSES; uluBusNumber++)865 for (ULONG uBus = 0; uBus < PCI_MAX_BUSES; uBus++) 840 866 { 841 867 /* Scan each device. */ 842 868 for (ULONG deviceNumber = 0; deviceNumber < PCI_MAX_DEVICES; deviceNumber++) 843 869 { 844 uSlot.u.bits.DeviceNumber = deviceNumber;870 Slot.u.bits.DeviceNumber = deviceNumber; 845 871 846 872 /* Scan each function (not really required...). */ 847 873 for (ULONG functionNumber = 0; functionNumber < PCI_MAX_FUNCTION; functionNumber++) 848 874 { 849 uSlot.u.bits.FunctionNumber = functionNumber;875 Slot.u.bits.FunctionNumber = functionNumber; 850 876 851 877 /* Have a look at what's in this slot. */ 852 878 PCI_COMMON_CONFIG PciData; 853 if (!HalGetBusData(PCIConfiguration, u luBusNumber, uSlot.u.AsULONG, &PciData, sizeof(ULONG)))879 if (!HalGetBusData(PCIConfiguration, uBus, Slot.u.AsULONG, &PciData, sizeof(ULONG))) 854 880 { 855 881 /* No such bus, we're done with it. */ … … 868 894 869 895 /* Hooray, we've found it! */ 870 Log(("vgdrvNt4FindPciDevice: Device found!\n")); 871 872 *puluBusNumber = uluBusNumber; 873 *puSlotNumber = uSlot; 896 Log(("vgdrvNt4FindPciDevice: Device found! Bus=%#x Slot=%#u (dev %#x, fun %#x, rvd %#x)\n", 897 uBus, Slot.u.AsULONG, Slot.u.bits.DeviceNumber, Slot.u.bits.FunctionNumber, Slot.u.bits.Reserved)); 898 899 *puBus = uBus; 900 *pSlot = Slot; 874 901 return STATUS_SUCCESS; 875 902 } … … 2340 2367 pDevExt->cbVmmDevMemory = (ULONG)pPartialData->u.Memory.Length; 2341 2368 2369 /* Technically we need to make the HAL translate the address. since we 2370 didn't used to do this and it probably just returns the input address, 2371 we allow ourselves to ignore failures. */ 2372 ULONG uAddressSpace = 0; 2373 PHYSICAL_ADDRESS PhysAddr = pPartialData->u.Memory.Start; 2374 if (HalTranslateBusAddress(pResList->List->InterfaceType, pResList->List->BusNumber, PhysAddr, 2375 &uAddressSpace, &PhysAddr)) 2376 { 2377 Log(("HalTranslateBusAddress(%#RX64) -> %RX64, type %#x\n", 2378 pPartialData->u.Memory.Start.QuadPart, PhysAddr.QuadPart, uAddressSpace)); 2379 if (pPartialData->u.Memory.Start.QuadPart != PhysAddr.QuadPart) 2380 pDevExt->uVmmDevMemoryPhysAddr = PhysAddr; 2381 } 2382 else 2383 Log(("HalTranslateBusAddress(%#RX64) -> failed!\n", pPartialData->u.Memory.Start.QuadPart)); 2384 2342 2385 /* Save resource information. */ 2343 2386 pBaseAddress->RangeStart = pPartialData->u.Memory.Start; -
trunk/src/VBox/Additions/common/VBoxGuest/win/VBoxGuestInst.cpp
r70164 r70194 42 42 43 43 44 static int installDriver( void)44 static int installDriver(bool fStartIt) 45 45 { 46 46 /* … … 54 54 } 55 55 56 char szDriver[MAX_PATH]; 57 GetSystemDirectory(szDriver, sizeof(szDriver)); 58 strcat(szDriver, "\\drivers\\VBoxGuest.sys"); 56 const char * const pszSlashName = (GetVersion() & 0xff) < 4 ? "\\VBoxGuestNT3.sys" : "\\VBoxGuestNT.sys"; 57 char szDriver[MAX_PATH * 2]; 58 GetCurrentDirectory(MAX_PATH, szDriver); 59 strcat(szDriver, pszSlashName); 60 if (GetFileAttributesA(szDriver) == INVALID_FILE_ATTRIBUTES) 61 { 62 GetSystemDirectory(szDriver, sizeof(szDriver)); 63 strcat(strcat(szDriver, "\\drivers"), pszSlashName); 64 } 59 65 60 66 SC_HANDLE hService = CreateService(hSMgrCreate, 61 67 VBOXGUEST_SERVICE_NAME, 62 68 "VBoxGuest Support Driver", 63 SERVICE_QUERY_STATUS ,69 SERVICE_QUERY_STATUS | (fStartIt ? SERVICE_START : 0), 64 70 SERVICE_KERNEL_DRIVER, 65 71 SERVICE_BOOT_START, … … 68 74 "System", 69 75 NULL, NULL, NULL, NULL); 70 if (!hService) 71 printf("CreateService failed! lasterr=%d\n", GetLastError()); 72 else 76 if (hService) 77 { 78 printf("Successfully created service '%s' for driver '%s'.\n", VBOXGUEST_SERVICE_NAME, szDriver); 79 if (fStartIt) 80 { 81 if (StartService(hService, 0, NULL)) 82 printf("successfully started driver '%s'\n", szDriver); 83 else 84 printf("StartService failed: %d\n", GetLastError(), szDriver); 85 } 73 86 CloseServiceHandle(hService); 87 } 88 else 89 printf("CreateService failed! lasterr=%d (szDriver=%s)\n", GetLastError(), szDriver); 74 90 CloseServiceHandle(hSMgrCreate); 75 91 return hService ? 0 : -1; … … 182 198 #endif 183 199 if (installMode) 184 rc = installDriver( );200 rc = installDriver(true); 185 201 else 186 202 rc = uninstallDriver();
Note:
See TracChangeset
for help on using the changeset viewer.