Con l'aiuto di alcuni pezzi di codice trovati in giro avevo sviluppato una classe apposita in C# che si interfacciava ad alcune DLL di sistema:
codice:
using System;
using System.Web;
using System.IO;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing.Printing;
using System.Security.Principal;
using System.Runtime.InteropServices;


public class NetLogon
{

    public static bool Login(string domain, string username, string password)
    {
        bool r = false;
        IntPtr token;
        bool result = LogonUser(
                username, domain,
                password,
                LogonTypes.Interactive,
                LogonProviders.Default,
                out token
            );
        if (result)
        {
            ImpersonateLoggedOnUser(token);
            CloseHandle(token);
            r = true;
        }
        return r;
    }

    [DllImport("advapi32.dll", SetLastError = true)]
    static extern bool LogonUser(
        string principal,
        string authority,
        string password,
        LogonTypes logonType,
        LogonProviders logonProvider,
        out IntPtr token);

    [DllImport("advapi32.dll", SetLastError = true)]
    static extern bool ImpersonateLoggedOnUser(IntPtr handle);

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool CloseHandle(IntPtr handle);

    enum LogonTypes : uint
    {
        Interactive = 2,
        Network,
        Batch,
        Service,
        NetworkCleartext = 8,
        NewCredentials
    }

    enum LogonProviders : uint
    {
        Default = 0,
        WinNT35,     
        WinNT40,     
        WinNT50      
    }
}
Compilando la classe (se c'è qualche buon'anima che la traduce in VB...) puoi utilizzare il metodo Login in questo modo:
codice:
if ( NetLogon.Login("DOMINIO", "Pippo", "Pluto") ) {
.... // si è loggato in rete, ora faccio quel che devo fare
}
Fammi sapere se funzica

Ps. così dovrebbe funzionare solo utilizzando pagine ASPX, per applicazioni è necessario fare alcune mod.