Turn off monitor

I have tried to switch off the monitor as specified in below thread but it is not working for Windows 10. I am getting error as 0xC0000010 (STATUS_INVALID_DEVICE_REQUEST). I am new to driver development. I would appreciate any help on this topic.

https://www.osronline.com/showthread.cfm?link=214666

I wanna to achieve the blackout functionality like we have in logmein.

Here is snippet of my code.

IoGetDeviceInterfaces returns 3 strings, like ??\ROOT\DISPLAY0##,

DbgPrint( “About to list display adapter devices\n” );
guidDisplay = GUID_DEVINTERFACE_DISPLAY_ADAPTER;
nResult = IoGetDeviceInterfaces( (LPGUID)&guidDisplay,
NULL, 0, &pDeviceList );
if (nResult != STATUS_SUCCESS)
{
DbgPrint( “IoGetDeviceInterfaces() failed with error %d\n”,
nResult );
}
else
{
pTemp = pDeviceList;

DbgPrint( “Printing device list (%d)\n”, 0xffff & *pTemp );

while (*pTemp != UNICODE_NULL)
{
DbgPrint( “RtlInitUnicodeString %ws\n”, pTemp);
RtlInitUnicodeString( &sTemp, pTemp );
pFO = NULL;
pDO = NULL;
nResult = IoGetDeviceObjectPointer ( &sTemp, FILE_ALL_ACCESS, &pFO,
&pDO );
if (nResult == STATUS_SUCCESS)
{
DbgPrint( “IoGetDeviceObjectPointer() returned %x\n”, nResult );
switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_DPMSDRV_NORMAL:
case IOCTL_DPMSDRV_OFF:
{

KeInitializeEvent(&ke_event, NotificationEvent, FALSE);
VideoPowerValue = VideoPowerOff;
irp = IoBuildDeviceIoControlRequest(
IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE,
pDO,
&VideoPowerValue,
sizeof(ULONG),
NULL, 0, // no output buffer
FALSE, &ke_event, &ioStatus);
DbgPrint( “IoBuildDeviceIoControlRequest() done.\n”);
PoStartNextPowerIrp(irp);
nResult = IoCallDriver(pDO, irp);
DbgPrint( “PoCallDriver() returned %x\n”, nResult );
if (nResult == STATUS_PENDING)
{
KeWaitForSingleObject(&ke_event, Executive, KernelMode, FALSE, NULL);
}
}
break;
case IOCTL_DPMSDRV_REDUCED:
case IOCTL_DPMSDRV_STANDBY:
case IOCTL_DPMSDRV_SUSPEND:
break;
}

}
else
{
// TODO: ObDeferenceObject( pDO )
}
DbgPrint( “while() done.\n”);

pTemp += (sTemp.Length + sizeof( UNICODE_NULL )) / sizeof( WCHAR );
DbgPrint( “RtlInitUnicodeString2\n”);
//break;
}

//TODO: ExFreePool( pDeviceList );
}