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

📄 freeotfe4pdacontextmgropen.c

📁 文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2, MD4, MD5, RIPEMD-128, RIPEMD-160, SHA-1, SHA-224, SHA-256,
💻 C
📖 第 1 页 / 共 2 页
字号:
            DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: +) ---OL ...Done.\n")));
            }
        }
    DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: +) AQ-4\n"), hDevice));

    DEBUGOUTMAINDRV(DEBUGLEV_EXIT, (TEXT("(OH: +) contextMgrOpen_AddOpenContext\n"), hDevice));
    return retval;
}


// =========================================================================
// This function removes the device indicated from the list of devices, and
// returns the device context of the device for the *caller* to overwrite
// and destroy
void contextMgrOpen_DeleteOpenContext(DWORD hOpen)
{
    OPEN_LIST_ITEM* currListItem = NULL;
    OPEN_LIST_ITEM* prevListItem = NULL;
    BOOL gotListCriticalSection;
    BOOL gotListItemCriticalSection;
    
    DEBUGOUTMAINDRV(DEBUGLEV_ENTER, (TEXT("(OH: %d) contextMgrOpen_DeleteOpenContext\n"), hOpen));

    if (!(G_contextMgrOpenInitialized))
        {
        DEBUGOUTMAINDRV(DEBUGLEV_ERROR, (TEXT("(OH: %d) Device mgr list not initialized\n"), hOpen));
        }
    else
        {
        if (G_contextMgrForceDismounts)
            {
            DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) EMERGENCY.\n"), hOpen));
            }
        else
            {
            DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) Not an emergency.\n"), hOpen));
            }

        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) AZ-1\n"), hOpen));
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) +++OL About to...\n"), hOpen));
        if (G_contextMgrForceDismounts)
            {
            gotListCriticalSection = TryEnterCriticalSection(&G_contextMgrOpenCriticalSection);
            }
        else
            {
            EnterCriticalSection(&G_contextMgrOpenCriticalSection);
            gotListCriticalSection = TRUE;
            }
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) +++OL ...Done..\n"), hOpen));
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) AZ-2\n"), hOpen));

        currListItem = G_contextMgrOpenDeviceList;
        prevListItem = NULL;
        while (currListItem != NULL)
            {
            DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) AZ-3.\n"), hOpen));
            if (currListItem->hOpen == hOpen)
                {
                // Unlink from list
                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) Unlinking from list...\n"), hOpen));
                if (prevListItem == NULL)
                    {
                    G_contextMgrOpenDeviceList = currListItem->NextListItem;
                    }
                else
                    {
                    prevListItem->NextListItem = currListItem->NextListItem;
                    }
                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) List item unlinked.\n"), hOpen));

                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) +++OI About to...\n"), hOpen));
                if (G_contextMgrForceDismounts)
                    {
                    gotListItemCriticalSection = TryEnterCriticalSection(&(currListItem->CriticalSection));
                    }
                else
                    {
                    EnterCriticalSection(&(currListItem->CriticalSection));
                    gotListItemCriticalSection = TRUE;
                    }
                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) +++OI ...Done.\n"), hOpen));

                currListItem->hOpen = 0;
                currListItem->hDevice = 0;

                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) AZ-3.3\n"), hOpen));
                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) ---OI About to...\n"), hOpen));
                if (gotListItemCriticalSection)
                    {
                    LeaveCriticalSection(&(currListItem->CriticalSection));
                    }
                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) ---OI ...Done.\n"), hOpen));
                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) AZ-3.4\n"), hOpen));

                // Free off list item
                DeleteCriticalSection(&(currListItem->CriticalSection));
                SecZeroAndFreeMemory(currListItem, sizeof(currListItem));

                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) AZ-3.5\n"), hOpen));
                break;
                }
            DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) AZ-4.\n"), hOpen));

            prevListItem = currListItem; 
            currListItem = currListItem->NextListItem;
            }
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) AZ-5.\n"), hOpen));

        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) ---OL About to...\n"), hOpen));
        if (gotListCriticalSection)
            {
            LeaveCriticalSection(&G_contextMgrOpenCriticalSection);
            }
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(OH: %d) ---OL ...Done.\n"), hOpen));
        }

    DEBUGOUTMAINDRV(DEBUGLEV_EXIT, (TEXT("(OH: %d) contextMgrOpen_DeleteOpenContext\n"), hOpen));
}

// =========================================================================
DWORD contextMgrOpen_CountDeviceOpenContext(DWORD hDevice)
{
    OPEN_LIST_ITEM* currListItem;
    DWORD retval = 0;

    DEBUGOUTMAINDRV(DEBUGLEV_ENTER, (TEXT("(ODH: %d) contextMgrOpen_CountDeviceOpenContext\n"), hDevice));

    if (!(G_contextMgrOpenInitialized))
        {
        DEBUGOUTMAINDRV(DEBUGLEV_ERROR, (TEXT("(ODH: %d) Device mgr list not initialized\n"), hDevice));
        }
    else
        {
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) +++OL About to...\n"), hDevice));
        EnterCriticalSection(&G_contextMgrOpenCriticalSection);
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) +++OL ...Done.\n"), hDevice));
        currListItem = G_contextMgrOpenDeviceList;
        while (currListItem != NULL)
            {
            if (currListItem->hDevice == hDevice)
                {
                retval++;
                }

            currListItem = currListItem->NextListItem;
            }

        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) ---OL About to...\n"), hDevice));
        LeaveCriticalSection(&G_contextMgrOpenCriticalSection);
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) ---OL ...Done.\n"), hDevice));
        }

    DEBUGOUTMAINDRV(DEBUGLEV_EXIT, (TEXT("(ODH: %d) contextMgrOpen_CountDeviceOpenContext\n"), hDevice));
    return retval;
}



// =========================================================================
// Destroy all open handles for the specified device
void contextMgrOpen_DeleteDeviceOpenContext(DWORD hDevice)
{
    OPEN_LIST_ITEM* currListItem;
    OPEN_LIST_ITEM* nextListItem;
    BOOL gotListCriticalSection;

    DEBUGOUTMAINDRV(DEBUGLEV_ENTER, (TEXT("(ODH: %d) contextMgrOpen_DeleteDeviceOpenContext\n"), hDevice));

    if (!(G_contextMgrOpenInitialized))
        {
        DEBUGOUTMAINDRV(DEBUGLEV_ERROR, (TEXT("(ODH: %d) Device mgr list not initialized\n"), hDevice));
        }
    else
        {
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) +++OL About to...\n"), hDevice));
        if (G_contextMgrForceDismounts)
            {
            gotListCriticalSection = TryEnterCriticalSection(&G_contextMgrOpenCriticalSection);
            }
        else
            {
            EnterCriticalSection(&G_contextMgrOpenCriticalSection);
            gotListCriticalSection = TRUE;
            }
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) +++OL ...Done.\n"), hDevice));
        currListItem = G_contextMgrOpenDeviceList;
        while (currListItem != NULL)
            {
            // Store the next one on the list; otherwise this information will
            // be overwritten if the current one is removed
            nextListItem = currListItem->NextListItem;

            if (currListItem->hDevice == hDevice)
                {
                // Note that even though 
                // contextMgrOpen_DeleteOpenContext(...) enters the list's
                // critical section, this won't block as it's still the same
                // thread as this function is called in
                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) Calling contextMgrOpen_DeleteOpenContext...\n"), hDevice));
                contextMgrOpen_DeleteOpenContext(currListItem->hOpen);
                DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) Finished calling contextMgrOpen_DeleteOpenContext\n"), hDevice));
                }

            currListItem = nextListItem;
            }

        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) ---OL About to...\n"), hDevice));
        if (gotListCriticalSection)
            {
            LeaveCriticalSection(&G_contextMgrOpenCriticalSection);
            }
        DEBUGOUTMAINDRV(DEBUGLEV_INFO, (TEXT("(ODH: %d) ---OL ...Done.\n"), hDevice));
        }

    DEBUGOUTMAINDRV(DEBUGLEV_EXIT, (TEXT("(ODH: %d) contextMgrOpen_DeleteDeviceOpenContext\n"), hDevice));
}


// =========================================================================
// =========================================================================

⌨️ 快捷键说明

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