[dpdk-dev] [PATCH 1/1] virt2phys: virtual to physical address translator for Windows

Dmitry Kozlyuk dmitry.kozliuk at gmail.com
Fri Apr 10 04:50:10 CEST 2020


> > +
> > +_Use_decl_annotations_
> > +VOID
> > +virt2phys_device_EvtIoInCallerContext(
> > +	IN WDFDEVICE device, IN WDFREQUEST request)
> > +{
> > +	WDF_REQUEST_PARAMETERS params;
> > +	ULONG code;
> > +	PVOID *virt;  
> 
> Should this be PVOID virt; (instead of PVOID *virt)?
> If so, changes will be required to parameters passed in to
> WdfRequestRetrieveInputBuffer() call.

This should be PVOID *virt (pointer to an untyped pointer). User-mode passes
a virtual address as a PVOID value, WdfRequestRetrieveInputBuffer() fills
virt with the address of that parameter, so that *virt is the virtual address
user-mode wants to translate into a physical one.

> 
> > +	PHYSICAL_ADDRESS *phys;
> > +	size_t size;
> > +	NTSTATUS status;
> > +
[snip]
> > +
> > +	status = WdfRequestRetrieveOutputBuffer(
> > +		request, sizeof(*phys), &phys, &size);  
> 
> Better to put a (PVOID *)typecast for &phys here:
> 	status = WdfRequestRetrieveOutputBuffer(
> 		request, sizeof(*phys), (PVOID *)&phys, &size); 

What do you mean? Without a typecast the built-in static analyzer emits a
warning (and all warnings are treated as errors for a driver):

virt2phys.c(108,46): error C2220: the following warning is treated as an error
virt2phys.c(108,46): warning C4047: 'function': 'PVOID *' differs in levels of indirection from 'PVOID **'
virt2phys.c(108,46): warning C4022: 'WdfRequestRetrieveInputBuffer': pointer mismatch for actual parameter 3

> > +	if (!NT_SUCCESS(status)) {
> > +		KdPrint(("WdfRequestRetrieveOutputBuffer() failed, "
> > +			"status=%08x\n", status));
> > +		WdfRequestComplete(request, status);
> > +		return;
> > +	}
> > +
> > +	*phys = MmGetPhysicalAddress(*virt);
> > +
> > +	WdfRequestCompleteWithInformation(
> > +		request, STATUS_SUCCESS, sizeof(*phys));
> > +}  
> 
> <Snip!>
> 
> Co-installers are no longer required (and discouraged) as per Microsoft. 
> So you can remove the lines indicated below from the .inf file.

Thanks, will remove in v2. They were generated by WDK solution template.

-- 
Dmitry Kozlyuk


More information about the dev mailing list