Windows 7 Compatibility: eliminato il supporto per la client/server connectivity di Win9x.

Salve a tutti.

Pochi giorni fa mi sono imbattuto in un problema di compatibilità tra Vista e Windows 7.

Su Vista, un vecchio programma Clipper a 16 bit, che viene eseguito in una finestra DOS, cioè attraverso la NTVDM, non riesce più a mappare le unità di rete attraverso i suo comandi nativi.

Debuggando il programma su Vista, vedo che viene utilizzata la NetUseAdd per compiere l’operazione. Conoscendo questo, debuggo l’applicazione su Windows 7, mettendo un breakpoint nella stessa funzione. A parte il piccolo problema che la funzione è stata spostata da netapi32!netuseadd a wkscli!netuseadd, comunque, non si ferma sul breakpoint.. proprio non passa di lì..

Investigando ancora un po' ho trovato una funzione eseguita precedentemente in NTVDM, VDMREDIR!VrDispatch, che utilizza una dispatch table per richiamare le funzioni quando necessario e lì sono riuscito a mettere il breakpoint, rendendomi conto che prima di NetUseAdd veniva chiamata GetDomainName e che questa già ritornava errore.

Andando a controllare l’implementazione, scoprivo l’arcano. L’implementazione della funzione si è ridotta a:

VrNetUseAdd(

    VOID

    )

{

SET_ERROR(ERROR_NOT_SUPPORTED);

}

La funzione non è più supportata.. il supporto ad alcune funzioni 16 bit è stato definitivamente eliminato.

Controllando, questo è l’elenco delle funzioni che non sono più implementate nella loro forma a 16 bit su Windows 7:

GetDomainName
GetLogonServer
GetUserName
NetGetDCName
NetMessageBufferSend
NetRemoteApi
NetServerEnum
NetServiceControl
NetServiceEnum
NetUseAdd
NetUseDel
NetUseEnum
NetUseGetInfo
NetWkstaGetInfo
NetWkstaSetInfo
GetAssignListEntry
DefineMacro
BreakMacro
NetTransactAPI
NetNullTransactAPI

Ciò è dovuto alla scelta di rimuovere il supporto alle funzionalità Client/Server di Win9x su Windows 7. Quindi, non è un bug ma è “By Design”.

E’ ora di muovere verso il codice a 32 bit..

O alternativamente, esiste l’XP Mode, che in questo caso permette di risolvere brillantemente il problema. Windows 7 rocks! Open-mouthed

Alla prossima!

Mario Raccagni
Senior Support Engineer
Platform Development Support Team