Even on Windows 7 and higher, this behavior is still limited to edges and not corners. I use AutoHotKey to achieve something similar to Ubuntu. Install it and run the following script:
#Persistent
SysGet, MonitorCount, MonitorCount
SysGet, Mon1, MonitorWorkArea
midH := (Mon1Right-Mon1Left)/2
midV := (Mon1Bottom-Mon1Top)/2
#NumPad1::
WinRestore, A
WinMove A, , 0, midV, midH, midV
return
#NumPad2::
WinRestore, A
WinMove A, , 0, midV, Mon1Right, midV
return
#NumPad3::
WinRestore, A
WinMove A, , midH, midV, midH, midV
return
#NumPad4::
WinRestore, A
WinMove A, , 0, 0, midH, Mon1Bottom
return
#NumPad5::
WinGet, MinMax, MinMax, A
if (MinMax = 0) {
WinMaximize, A
} else {
WinRestore, A
}
return
WinRestore, A
#NumPad6::
WinRestore, A
WinMove A, , midH, 0, midH, Mon1Bottom
return
#NumPad7::
WinRestore, A
WinMove A, , 0, 0, midH, midV
return
#NumPad8::
WinRestore, A
WinMove A, , 0, 0, Mon1Right, midV
return
#NumPad9::
WinRestore, A
WinMove A, , midH, 0, midH, midV
return
It allows you to use Win + any key on the numpad to move the active window to the corresponding edge/corner, with Win+Num5 for maximize/restore
Edit:
For a multi-monitor setup, here is the revised version of the script (Github link)