Mounted Database Example (Windows Embedded CE 6.0)
1/6/2010
The following code example shows how to mount the MyDBVol database volume. The example opens the database volume if the volume already exists, or it creates the volume if the volume does not exist. The example also shows how to enumerate all mounted database volumes and transfer the data into permanent storage.
void MountingDBVolume (void)
{
CEGUID ceguid; // Identifier of the mounted volume.
LPWSTR lpBuf; // Buffer to store the volume name.
TCHAR szError[100]; // String that contains the error message.
DWORD dwError, // Return value of the GetLastError function.
dwNumChars; // Length of the buffer in characters.
TCHAR * szFname = TEXT("\\Storage Card\\MyDBVol"); // Name of the database volume.
BOOLEAN bFinished = FALSE; // Loop (enumeration) control.
// Use an invalid CEGUID to tell CeMountDBVol to search only on the volume name.
CREATE_INVALID_GUID(&ceguid);
// Open the MyDBVol database volume on the storage card, if it exists.
// Create it if it does not exist.
if (!CeMountDBVol (&ceguid, // Receives the CEGUID of the mounted volume.
szFname, // Database-volume name.
OPEN_ALWAYS)) // Create the database volume if it does not exist.
{
// Your error-handling code goes here.
// If the database volume was not opened or created
wsprintf (szError, TEXT("ERROR: CeMountDBVol failed (%ld)"), GetLastError());
}
// Allocate memory for lpBuf.
lpBuf = (LPWSTR) LocalAlloc (LPTR, MAX_PATH);
// Assign MAX_PATH to dwNumChars.
dwNumChars = MAX_PATH;
// Use an invalid CEGUID to tell CeEnumDBVolumes to enumerate all volumes.
CREATE_INVALIDGUID (&ceguid);
while (!bFinished)
{
// Enumerates database volumes.
if (!CeEnumDBVolumes (&ceguid, // Receives the CEGUID of the mounted volume.
lpBuf, // Buffer to store the database- volume name.
dwNumChars)) // Length of buffer in char.
{
// If error occurs in enumerating
bFinished = TRUE; // Finished enumerating.
dwError = GetLastError();
wsprintf (szError, TEXT("ERROR: CeMountDBVol failed (%ld)"), dwError);
if (dwError == ERROR_INSUFFICIENT_BUFFER)
{
// To avoid having to restart the enumeration, free lpBuf and reallocate a bigger buffer.
bFinished = FALSE; // Continue with enumerating.
LocalFree (lpBuf); // Free lpBuf.
// Your code to reallocate a bigger buffer goes here.
}
}
else // Succeeded in enumerating
{
// Flush the database volume's data to permanent storage.
if (!CeFlushDBVol (&ceguid))
{
wsprintf (szError, TEXT("ERROR: CeFlushDBVol failed."));
// Your error-handling code goes here.
}
}
}
}