⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rapiserv.c

📁 上传的代码是WindowsCEProgramming第一版的源代码
💻 C
字号:
//======================================================================
// RapiServ - A RAPI block mode server DLL
//
// Written for the book Programming Windows CE
// Copyright (C) 1998 Douglas Boling
//======================================================================
#include <windows.h>                 // For all that Windows stuff

// This ensures that the function will be exported by the DLL.
__declspec(dllexport) INT RAPIGetDiskSize (DWORD, BYTE *, DWORD *,
                                           BYTE **, PVOID);

//======================================================================
// DllMain - DLL initialization entry point
//
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD dwReason,
                     LPVOID lpvReserved) {
    return TRUE;
}
//======================================================================
// RAPIGetDiskSize - Returns the disk size and free space.  Called from
// PC application using RAPI.
//
INT RAPIGetDiskSize (DWORD cbInput, BYTE *pInput, DWORD *pcbOutput,
                     BYTE **ppOutput, PVOID reserved) {
    PDWORD pdwLocal;
    LPTSTR pPtr;
    DWORD i;
    ULARGE_INTEGER lnFree, lnTotal;

    *pcbOutput = 0;            // Zero output bytes for now.

    // See if proper zero-terminated string.
    pPtr = (LPTSTR)pInput;
    for (i = 0; i < cbInput / 2; i++)
        if (!*pPtr++)
            break;

    // If not zero terminated or if zero length, return error.
    if ((i >= cbInput / 2) || (i == 0))
        return -2;

    // Call the function.
    if (GetDiskFreeSpaceEx ((LPTSTR)pInput, NULL, &lnTotal, &lnFree)) {

        // Allocate memory for the return buffer.
        pdwLocal = (PDWORD) LocalAlloc (LPTR, 2 * sizeof (DWORD));
        if (pdwLocal) {
            // Copy data from function to output buffer.
            pdwLocal[0] = lnTotal.LowPart;
            pdwLocal[1] = lnFree.LowPart;

            // Specify size and buffer.
            *pcbOutput = 2 * sizeof (DWORD);
            *ppOutput = (PBYTE)pdwLocal;
        } else
            return GetLastError();
    } else
        return GetLastError();
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -