急detours hook api的有关问题,推荐API HOOK的教程

急!detours hook api的问题,推荐API HOOK的教程!
这是代码,照detours帮助文档写的,用来实现文件操作的截获,在另外一个程序中通过LoadLibrary(),FreeLibrary()来导入该DLL,attach和detach都显示成功了,但就是无法截获文件的操作,我还特地的写了一个DeleteFileW的程序,但文件还是照删不误,请问这是什么原因呢?
有什么学习API HOOK比较好的教程么?(《windows核心编程》?),我想系统学一下,现在基本上半查半编的写着程序~麻烦诸位推荐一下,谢谢了!

C/C++ code

#include <windows.h>
#include <detours.h>
#include <tchar.h>

//BOOL (WINAPI * SysDeleteFileA)(LPCTSTR lpFileName)= DeleteFile;
//BOOL WINAPI MyHookDeleteFileA(LPCTSTR lpFileName);

BOOL (WINAPI * SysDeleteFileW)(LPCTSTR lpFileName)= DeleteFileW;
BOOL WINAPI MyHookDeleteFileW(LPCTSTR lpFileName);

BOOL (WINAPI *SysMoveFileExW)(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,DWORD dwFlags)=MoveFileExW;
BOOL WINAPI MyHookMoveFileExW(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,DWORD dwFlags);

HANDLE (WINAPI *SysCreateFileW)(
  LPCTSTR lpFileName,          // pointer to name of the file
  DWORD dwDesiredAccess,       // access (read-write) mode
  DWORD dwShareMode,           // share mode
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
                               // pointer to security attributes
  DWORD dwCreationDisposition,  // how to create
  DWORD dwFlagsAndAttributes,  // file attributes
  HANDLE hTemplateFile         // handle to file with attributes to
                               // copy
)=CreateFileW;

HANDLE MyHookCreateFileW(
  LPCTSTR lpFileName,          // pointer to name of the file
  DWORD dwDesiredAccess,       // access (read-write) mode
  DWORD dwShareMode,           // share mode
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
                               // pointer to security attributes
  DWORD dwCreationDisposition,  // how to create
  DWORD dwFlagsAndAttributes,  // file attributes
  HANDLE hTemplateFile         // handle to file with attributes to
                               // copy
);

__declspec(dllexport) void ExportFunc(void)
{
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
    switch(fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)SysDeleteFileW,MyHookDeleteFileW);

        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)SysMoveFileExW,MyHookMoveFileExW);

        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)SysCreateFileW,MyHookCreateFileW);

        if(DetourTransactionCommit()==NO_ERROR)
        {
            MessageBox(NULL,_T("Attach Successfully!"),_T("Successful"),MB_OK);
        }

    //    DetourTransactionBegin();
    //    DetourUpdateThread(GetCurrentThread());
    //    DetourAttach(&(PVOID&)SysDeleteFileW,MyHookDeleteFileW);
       
        break;
    case DLL_PROCESS_DETACH:
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourDetach(&(PVOID&)SysDeleteFileW, MyHookDeleteFileW);

        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourDetach(&(PVOID&)SysMoveFileExW, MyHookMoveFileExW);

        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourDetach(&(PVOID&)SysCreateFileW, MyHookCreateFileW);

        if(DetourTransactionCommit()==NO_ERROR)
        {
            MessageBox(NULL,_T("Detach Successfully!"),_T("Successful"),MB_OK);
        }

        break;

    }

    return true;
}

BOOL WINAPI MyHookDeleteFileW(LPCTSTR lpFileName)
{
    MessageBox(NULL,_T("You Can Not Delete This File!"),_T("ERROR"),MB_OK);
    return true;
}

BOOL WINAPI MyHookMoveFileExW(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,DWORD dwFlags)
{
    MessageBox(NULL,_T("You Can Not Move This File!"),_T("ERROR"),MB_OK);
    return true;
}


HANDLE MyHookCreateFileW(
  LPCTSTR lpFileName,          // pointer to name of the file
  DWORD dwDesiredAccess,       // access (read-write) mode
  DWORD dwShareMode,           // share mode
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
                               // pointer to security attributes
  DWORD dwCreationDisposition,  // how to create
  DWORD dwFlagsAndAttributes,  // file attributes
  HANDLE hTemplateFile         // handle to file with attributes to
                               // copy
                               ){
    MessageBox(NULL,_T("You Can Not Create File!"),_T("ERROR"),MB_OK);
    return NULL;

}