2011-06-28 23 views
0

UNCパス上の空きディスク領域を調べるために、次のコードがあります。デバッグモードで実行すると適切な値が得られますが、リリースモードで実行すると、GetFreeDiskSpaceEx関数で1326のログオンエラーが発生します。私はGetFreeDiskSpaceExを呼び出す上でNetUseAddを使っています。誰かがここでUNCからディスクスペースを取得する方法を教えてもらえますか?以下は私が使用している機能です。UNCパスのGetFreeDiskSpaceEx

void FreeSpaceOnPath(LPCWSTR Path, unsigned __int64* freeBytesAvailable, unsigned __int64* totalNumberOfBytes) 
{ 
    // set the structure (use_info_2) 
    USE_INFO_2 u; 

    // set netuseadd and error checking variables 
    DWORD rc, error=0; 

    memset(&u, '\0', sizeof u); 

    //fill in the USER_INFO_2 for connection infor 
    u.ui2_local = NULL; 
    u.ui2_remote = (LPWSTR) L"\\\\10.0.0.113\\e";; 
    u.ui2_password = (LPWSTR) L"password#123"; //specify no password 
    u.ui2_username = (LPWSTR) L"10.0.0.113\\user"; // specify no username 
    u.ui2_asg_type = USE_WILDCARD; 

    rc = NetUseAdd(NULL, 1, (byte *) &u, &error); 
    DWORD lasterror = GetLastError(); 
    printf("GetLastError:%d\n", lasterror); 

    ULARGE_INTEGER freeBytesAvailable2, totalNumberOfFreeBytes, totalNumberOfBytes2; 
    BOOL ok = GetDiskFreeSpaceEx(Path, &freeBytesAvailable2, &totalNumberOfBytes2, &totalNumberOfFreeBytes); 
    DWORD err = GetLastError(); 
    printf("Value returned for GetDiskFreeSpaceEx: %d GetLastError:%d\n", ok, err); 
    wprintf(L"Dir: %s\n", dir); 
    printf("Value returned for GetDiskFreeSpaceEx: %d\n", ok); 
    if (ok) 
    { 
     *freeBytesAvailable = freeBytesAvailable2.QuadPart; 
     *totalNumberOfBytes = totalNumberOfBytes2.QuadPart; 
    } 

答えて

0

NetUseAddの代わりにWNetConnection2を使用し、ネットワークドライブをマッピングすることでこれを修正しました。接続されたドライブでGetDiskFreeSpaceExを使用すると適切な値が返されます。

関連する問題