Beispiel #1
0
BOOL
WINAPI
DeleteGroupW(LPCWSTR lpGroupName,
             BOOL bCommonGroup)
{
    WCHAR szGroupPath[MAX_PATH];

    DPRINT("DeleteGroupW() called\n");

    if (lpGroupName == NULL || *lpGroupName == 0)
        return TRUE;

    if (!GetProgramsPath(bCommonGroup, szGroupPath))
    {
        DPRINT1("GetProgramsPath() failed\n");
        return FALSE;
    }
    DPRINT("Programs path: '%S'\n", szGroupPath);

    wcscat(szGroupPath, L"\\");
    wcscat(szGroupPath, lpGroupName);
    DPRINT("Group path: '%S'\n", szGroupPath);

    /* Remove directory path */
    if (!RemoveDirectoryPath (szGroupPath))
        return FALSE;

    /* FIXME: Notify the shell */

    DPRINT("DeleteGroupW() done\n");

    return TRUE;
}
Beispiel #2
0
BOOLEAN RemoveDirectoryPath(_In_ PWSTR DirPath)
{
    HANDLE findHandle;
    PPH_STRING findPath;
    WIN32_FIND_DATA data = { 0 };

    findPath = PhConcatStrings2(DirPath, L"\\*");

    if ((findHandle = FindFirstFile(findPath->Buffer, &data)) == INVALID_HANDLE_VALUE)
    {
        if (GetLastError() == ERROR_FILE_NOT_FOUND)
        {
            PhDereferenceObject(findPath);
            return TRUE;
        }

        PhDereferenceObject(findPath);
        return FALSE;
    }

    do
    {
        if (PhEqualStringZ(data.cFileName, L".", TRUE) || PhEqualStringZ(data.cFileName, L"..", TRUE))
            continue;

        if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            PPH_STRING dirPath = PhConcatStrings(3, DirPath, L"\\", data.cFileName);

            RemoveDirectoryPath(dirPath->Buffer);
            PhDereferenceObject(dirPath);
        }
        else
        {
            PPH_STRING filePath = PhConcatStrings(3, DirPath, L"\\", data.cFileName);

            if (data.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
            {
                _wchmod(filePath->Buffer, _S_IWRITE);
            }

            SetupDeleteDirectoryFile(filePath->Buffer);
            PhDereferenceObject(filePath);
        }

    } while (FindNextFile(findHandle, &data));

    FindClose(findHandle);

    // Delete the parent directory
    RemoveDirectory(DirPath);

    PhDereferenceObject(findPath);
    return TRUE;
}