Modify Microsoft Basic Display Driver to get a better resolution

Microsoft has introduced a new out-of-box driver, Microsoft Basic Display Adapter Driver. This driver is used during installation, a suitable driver is not found(always old adapters no longer supported by manufacturers), safe mode. And you can always use it when your graphics adapter has a buggy driver.
However, as its name, basic display adapter, it provides 640*480 when boot in headless mode, that is, no monitor is attached to a systtem. And actually, we usually put our servers, HTPC(it become headless if you switch to other source in your TV) in this mode.
By modifying the default value in BasicDisplay.sys, we can change this.

use IDA, according the function names, we can easily reach here:
PAGE:000000000001852C ; private: void BASIC_DISPLAY_DRIVER::GoToHeadless(enum _BDD_HEADLESS_REASON)
PAGE:000000000001852C ?GoToHeadless@BASIC_DISPLAY_DRIVER@@AEAAXW4_BDD_HEADLESS_REASON@@@Z proc near
PAGE:000000000001852C ; CODE XREF: BASIC_DISPLAY_DRIVER::FallbackStart(_DXGK_DISPLAY_INFORMATION_PLUS_EDID *,uchar)+141p
PAGE:000000000001852C ; BASIC_DISPLAY_DRIVER::FallbackStart(_DXGK_DISPLAY_INFORMATION_PLUS_EDID *,uchar)+310p …
PAGE:000000000001852C
PAGE:000000000001852C arg_0 = qword ptr 8
PAGE:000000000001852C
PAGE:000000000001852C mov [rsp+arg_0], rbx
PAGE:0000000000018531 push rdi
PAGE:0000000000018532 sub rsp, 20h
PAGE:0000000000018536 movsxd rbx, edx
PAGE:0000000000018539 mov rdi, rcx
PAGE:000000000001853C call cs:__imp_WdLogNewEntry5_WdEvent
PAGE:0000000000018542 movsxd r8, dword ptr [rdi+238h]
PAGE:0000000000018549 mov rcx, rax
PAGE:000000000001854C mov [rax+18h], r8
PAGE:0000000000018550 mov [rax+20h], rbx
PAGE:0000000000018554 call cs:__imp_WdLogEvent5_WdEvent
PAGE:000000000001855A bts dword ptr [rdi+29Ch], 0Ch
PAGE:0000000000018562 mov [rdi+238h], ebx
PAGE:0000000000018568 or dword ptr [rdi+1D0h], 0FFFFFFFFh
PAGE:000000000001856F mov rbx, [rsp+28h+arg_0]
PAGE:0000000000018574 xor eax, eax
PAGE:0000000000018576 or dword ptr [rdi+1DCh], 8
PAGE:000000000001857D mov [rdi+1F0h], rax
PAGE:0000000000018584 mov [rdi+1D8h], eax
PAGE:000000000001858A mov dword ptr [rdi+1B8h], 280h
PAGE:0000000000018594 mov dword ptr [rdi+1BCh], 1E0h
PAGE:000000000001859E mov qword ptr [rdi+1C0h], 0A00h
PAGE:00000000000185A9 add rsp, 20h
PAGE:00000000000185AD pop rdi
PAGE:00000000000185AE retn
PAGE:00000000000185AE ?GoToHeadless@BASIC_DISPLAY_DRIVER@@AEAAXW4_BDD_HEADLESS_REASON@@@Z endp
PAGE:00000000000185AE

modify 280h to width,1e0h to height.

For your convenience, I have patched x64/x86, and there are 3 resolutions mod in compressed files. After a few googling, 1366*736 is most used resolution, and 1600*900/1920*1080 is used in recent HD monitors.

1. Download this package

2. Change your current adapter driver from a buggy driver, e.g. Intel driver. skip this if you are using Basic Adapter Driver already. reboot, and you should get a very low resolution at 640*480( if you are remoting). It’s best to do a check in device manager, it’s using basic adapter driver.

3. Take a file you wanted from the compressed file, go to C:\Windows\System32\Drivers, modify the files security, take the ownership from TrustInstaller to Administrators, and assign Administrators to Full Access. replace the file, reboot. now you can get the respective resolution according what files you used.

as to search friendly:

Windows 8 enable widescreen on basic display driver.
Windows 8.1 enable widescreen on basic display driver.
Windows 8/8.1 enble native resolution with old video adapters.
D54250WYK ‘headless’ issue
D34010WYK ‘headless’ issue
Intel display driver headless issue
Intel NUC black screen
Download(Please rename to a zip after download, it’s renamed due to wordpress limitation) basic_driver.zip
You can also get file from here: https://github.com/ywjheart/basic_adapter_driver_modification
Advertisements

26 Comments

  1. God, damn it! My old laptop’s Display Adapter(Ati x1300) has some problem, if I install it’s driver to fully enable it’s hardware features, it would cause BSOD. So I have to install Windows 8 and use Basic Display Driver and it works fine. But as you know, this driver can’t set the resolution properly. And then I found your post. But my laptop’s monitor is 1280*800, you don’t provide that resolution patch. I have to patch by myself. The problem is, I don’t know anything about disassembly. I try to use IDA to locate the offset of 280h and 1e0h you’ve mentioned, and compare the context hex value with one of your patched file to make sure I find the right place. And then I use UltraEdit to edit the hex value, change that 280h to 00 05 and change that 1e0h to 20 30. I also use UltraCompare to compare the original file between patched file and found out you are not only modified those values but also modified some values in the file’s header. And of course, you added a digital signature too. But I can’t understand those values you modified in the file’s header. So I just modified width and height value because you just saying those values. Then I follow your instruction to replace the driver file and then reboot. And then I fall to hell…… After rebooting, the computer showing the Windows 8’s starting screen and after a few seconds the monitor just showing nothing(monitor is working but showing black)! I wait about a minute and things did not changed. So I force to shutdown the laptop and then power on again. But… the monitor is not work! It even didn’t power on! I can just hearing the CPU fan’s running noise. I can’t see the BIOS booting logo, nothing, I see nothing… So I teardown the laptop, plug out the mainboard’s battery to clear the CMOS and then plug it in back. But nothing changed! Maybe the driver cause some hardware broken…… My laptop is dead……

    Like

    1. So sorry to hear that. don’t give up, try to recovery that.
      you can try to use external monitor to test that first.
      Usually an incorrect display mode would cause black screen only, it doesn’t broke a monitor permantly.

      Let us back to the driver file.
      after modifcation to instructions in a driver, one or two things must be done.
      1. checksum. you need to update the file sum after modification. you can do this with lordpe, coff explorer. google “PE FILE Checksum” for more detail.
      2. in windows 32bit OS, digital signature is not required. but it’s required in windows 64bit OS.

      Let me know what’s going on, and I can modify dirvers for you. let me know about the os version(like win8, win8.1), and the paltform(like 32bit, or 64bit).

      Like

      1. Ok, I’ll try to connect to external monitor tomorrow. But to be honest, I do not expect it works.

        The Windows 8 version is NT6.3 9364, 32bit, yeah, it’s a alpha or beta edition of Win8.1. Because when I install it, Win8.1 in not RTM and I just want to test it at that time. I use its original BasicDisplay.sys to modify.

        But it doesn’t matter now, if my laptop really still can work, I will reinstall the OS with Win8.1 RTM. So, if you modify for me, you can use Win8.1’s file, and I hope you provide both 32bit and 64bit.

        And, do I need to leave you my e-mail address at here? I don’t know if you can view it in WordPress’s backend.

        And, well, sorry for my poor English……

        Like

      2. I’ve tried to connect to external monitor which resolution is 1920*1080, but it still not work. Nothing changed, the laptop’s monitor still not light on, the HDD LED still lighting yellow. I have to give up, it’s dead.

        Like

      3. sorry for so late, I just saw your comment, I don’t often check this blog.
        and never mind, I’m also not an English native speaker.

        Like

    1. Thanks for this! However, would you mind adding the code to force 1280×800 outside GoToHeadless(…) as well? Right now it doesn’t change anything in regular desktop mode (max 1024×768). Many thanks! :)

      Like

    2. I hav the same problem as Jimmy said.
      The old notebook ASUS F5RL with Radeon Xpress 1100 (detected by MS Basic Display Adapter on Win8.1 as Radeon Xpress 200M Series).
      I’ve installed 1280×800 patched driver but see the same modes list with 1024×768 max.

      Like

      1. All-clear now. :-)
        Where do you think I’ve found the proper driver? On the Asus support site. ;-)
        At first I was baffled with lack of Vista64 package, but actually Vista32 one contains both platforms.
        No need to proceed full-blown setup, just feed Win8.1 the proper folder using “have disk” option.

        Like

    3. Could you please add 1024×600 resolution. Intel declines to provide Intel GMA Drivers for windows 8. This is the only solution. Thank you

      Like

  2. Hello I am running a Windows server 2012, remotely and need a bigger display. do you thing this would work to also raise the resolution on this version of windows?

    Like

  3. morning, can you post the list of resolutions of your basic_driver.zip ? the 1440x 900 (win8 x64) is included?

    Like

  4. Hey, nice work. But which tool you use for looking at those .sys files? Wanted to create a 1680×1050 res but I don’t find any tool for looking at the sys.

    Like

  5. i could use a 1800×1024 win 10 64bit its for headless and sometimes not headless atm works great (reason im using the basic driver) but when connected to a screen i have to re-enable the driver otherwise is way past my tv

    Like

  6. Never managed to get this to work. My old HP dv9088ea running Windows 10 will only run in 1024×768 with a modified driver. Lower options are available with the original basic driver but I want it to use the native 1440×900.

    Recently, a friend persuaded me to install Linux Mint. Guess what? The screen immediately started up at the full 1440×900 resolution! If the enthusiasts who develop Linux can do this, why on earth can’t the full time professionals at Microsoft? Why are we stuck with a driver designed for year 2000 technology?

    Like

  7. Hello, This method will work on Windows 10? I have an Dell Inspiron 1300 and the video controller is not recognized, the basic display adapter has only 800×600 and 1024×768, I need 1280×800!

    Like

  8. Your post saved my life! Unfortunetely, when I’ve tried 1920×1080 and 1336×768 patched drivers in a turn, the resolution on Windows 8.1 still stucked at native 1280×800.. What shoud i check next? Thanks!

    Like

  9. In your instructions on modifying BasicDisplay.sys “use IDA, according the function names, we can easily…”

    What is IDA?

    Should the modified BasicDisplay.sys have an incremented file version, to facilitate restoring the previous version, if necessary?

    (Win Server 2012, basic installation ~ not core)

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s