0

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

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;
    }
4

1 に答える 1

0

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

于 2011-07-02T06:05:22.160 に答える