local bmp = dotNetObject "System.Drawing.Bitmap" 50 50
local gfx = (dotnetClass "system.drawing.graphics").fromImage bmp
local rect = dotNetObject "System.Drawing.Rectangle" 0 0 50 50
gfx.FillEllipse (dotNetClass "System.Drawing.Brushes").red rect
local hCursor = dotNetObject "System.IntPtr" (bmp.getHIcon())
(dotnetClass "Cursor").current = dotNetObject "Cursor" hCursor
Of course, this will only last until you move the mouse as max will send a WM_SETCURSOR message on each mouse move.
If it's for a specific form, use the form.Cursor
If you need to replace the mouse cursor, you will need to take over the 3dsmax wndproc and override the WM_SETCURSOR messages.