• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            zhiye_wang

            向星空仰望的越深,越發現自己的渺小

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              31 隨筆 :: 1 文章 :: 2 評論 :: 0 Trackbacks

            #

            在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類A類B,A中使用了B定義的類型,B中也使用了A定義的類型
            例如:
            類CGUICmd中調用了類CMainFrame。
            類CMainFrame中調用了類CGUICmd。
            //////////////////////////////////////////////////////////////////////////
            /// GUICmd.h
             
            #ifndef _GUI_CMD_H
            #define _GUI_CMD_H
             
            class CGUICmd
            {
            public:
            CGUICmd(void);
            ~CGUICmd(void);
            int Gui_GetMessage(HWND hWnd, SOCKET sService, int bBlocking, CMainFrame* pFrame);
             
            public:
            SOCKET sService;
            };
            //////////////////////////////////////////////////////////////////////////
            /// main_frame.h
             
            #ifndef _MAIN_FRAME_H
            #define _MAIN_FRAME_H
             
            class CMainFrame:public CXMLWnd
            {
            public:
            CGUICmd m_cGuiCmd;
            };
            不能單純的再對方的源文件中互相包含頭文件。
            較好的方式:
            main_frame.h 中#include "GUICmd.h", 
            CGUICmd.h 中加入一行:class CMainFrame;
            CGUICmd.cpp 中#include "main_frame.h"
            //////////////////////////////////////////////////////////////////////////
            /// main_frame.h
             
            #ifndef _MAIN_FRAME_H
            #define _MAIN_FRAME_H
             
            #pragma once
             
            #include "GUICmd.h"    
            //////////////////////////////////////////////////////////////////////////
            /// GUICmd.cpp
             
            #include "GUICmd.h"
            #include "main_frame.h"
             
             
            //////////////////////////////////////////////////////////////////////////
            /// GUICmd.h
             
            #ifndef _GUI_CMD_H
            #define _GUI_CMD_H
             
            class CMainFrame;
             
            class CGUICmd
            {
            }
            posted @ 2014-12-24 15:32 zhiye_wang 閱讀(453) | 評論 (0)編輯 收藏

            二 創建策略并設置給指定用戶
            1 打開“組策略管理”(在這里創建策略)
            cmd下輸入GPMC.MSC 打開組策略管理
            隨后在域上右鍵選擇“在這個域中創建GPO并在此處鏈接”,輸入名字“磁盤管理策略”,
            右鍵”編輯“,設置"隱藏磁盤分區(1)"中添加的策略“僅僅禁用F盤“。
            右鍵“磁盤管理策略”,勾選強制,勾選已啟用鏈接。
            2 關聯此GPO
            默認情況下,GPO 影響鏈接的站點、域或 OU 中包含的所有用戶和計算機。
            不過,您可以在 GPO 上使用安全篩選以修改其效果:通過修改 GPO 權限僅將其應用于特定用戶、Active Directory 安全組成員或計算機。通過將安全篩選和 OU 中的相應位置相結合,您可以將任何一組給定的用戶或計算機作為目標。
            要將 GPO 應用于給定用戶、安全組或計算機,該用戶、組或計算機必須具有 GPO 的“讀取”和“應用組策略”權限。默認情況下,“經過身份驗證的用戶”將“讀取”和“應用組策略”權限設置為“允許”。這兩個權限是作為一個單位使用 GPMC 中的安全篩選進行管理的。
            若要設置給定 GPO 的權限,以便僅將 GPO 應用于特定用戶、安全組或計算機(而不是應用于所有經過身份驗證的用戶),請在 GPMC 控制臺樹中包含該 GPO 的林和域中展開“組策略對象”。單擊該 GPO,然后在細節窗格的“作用域”選項卡上的“安全篩選”下面,刪除“經過身份驗證的用戶”,單擊“添加”,然后添加新的用戶、組或計算機。
            在”磁盤管理策略“的右側窗口中,“安全篩選”下,添加需要生效的域用戶。
            3 刷新GPO
            默認的GPO設置不會自動刷新,只會在以下情況
            系統啟動時
            用戶登錄時
            間隔最長90分鐘就刷新一次,原則上是隨機的小于90分鐘的時間啟動一次。
            手動刷新GPO設置:GPUPDATE.EXE
            4 登錄查看
            用域用戶zhiye.wang登錄,查看,F盤已經看不到。
            用域用戶ming.xiao登錄,查看,F盤依舊可以看到。
            posted @ 2014-12-23 18:00 zhiye_wang 閱讀(568) | 評論 (0)編輯 收藏

            調用API函數NetShareAdd()將文件夾設置為共享,調用此函數后如果不做其他設置,網絡用戶是無法訪問共享文件夾的,因為此文件夾在NTFS分區中,同時受到NTFS文件系統的訪問控制,因此還需要第2步;
            調用DOS命令cacls,賦予Guest用戶組讀寫權限;
            如果要取消文件共享,直接調用API函數NetShareDel()

            對于FAT32分區中文件夾,cacls命令是不起作用的,這個命令專用于NTFS格式下的文件和文件夾。也就是說上面這種解決方法的第步不能用了,那么現在只能使用NetShareAdd()函數添加文件共享。調用此函數后如果不做其他設置,網絡用戶可以訪問共享文件夾,但擁有完全控制權限(這是默認的共享權限設置),而在實際項目中我們希望能夠編程控制讀寫權限。在NTFS分區中,我們還有NTFS文件系統的訪問控制功能罩著,在FAT32分區中就只能依賴于操作系統文件夾共享自身的權限設置功能了。
             1NET_API_STATUS NetShareAdd(
             2_In_   LPWSTR servername,
             3_In_   DWORD level,
             4_In_   LPBYTE buf,
             5_Out_  LPDWORD parm_err
             6);
             7typedef struct _SHARE_INFO_2 {
             8LPWSTR shi2_netname;
             9DWORD  shi2_type;
            10LPWSTR shi2_remark;
            11DWORD  shi2_permissions;
            12DWORD  shi2_max_uses;
            13DWORD  shi2_current_uses;
            14LPWSTR shi2_path;
            15LPWSTR shi2_passwd;
            16}
             SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;

            addShare.cpp

             1// 說明:
             2// FAT 系統調用此函數,shi502_permissions參數無效。有且僅有共享權限為最高權限。
             3// NTFS 系統調用此函數,請修改shi502_permissions參數,可使用如下權限:
             4// ACCESS_READ, ACCESS_WRITE, ACCESS_CREATE, ACCESS_EXEC
             5// ACCESS_DELETE, ACCESS_ATRIB, ACCESS_PERM, ACCESS_ALL
             6BOOL addShare(LPTSTR lpShareName, LPTSTR lpShareDir)
             7{
             8NET_API_STATUS res;
             9SHARE_INFO_502 p;
            10 
            11p.shi502_netname = lpShareName; //共享名
            12p.shi502_type = STYPE_DISKTREE; 
            13p.shi502_remark = NULL;
            14p.shi502_permissions = ACCESS_ALL;
            15p.shi502_max_uses = SHI_USES_UNLIMITED; //最大鏈接數
            16p.shi502_current_uses = 0;
            17p.shi502_path = lpShareDir; //需要共享的路徑
            18p.shi502_passwd = NULL;
            19p.shi502_reserved = 0;
            20p.shi502_security_descriptor = NULL;
            21 
            22res = NetShareAdd(NULL, 502, (LPBYTE)&p, NULL);
            23 
            24if (NERR_Success == res)
            25{
            26printf("Share created.\n");
            27}

            28else
            29{
            30printf("NetShareAdd error: %u\n", res);
            31}

            32return (res==NERR_Success);
            33}

            34

            delShare.cpp
             
             1BOOL delShare(LPTSTR lpShareName)
             2{
             3    NET_API_STATUS res;
             4    //TCHAR szShareName[256] = "TestShare";
             5    //TCHAR szShreDir[256] = "F:\\Media";
             6    res = NetShareDel(NULL, (LMSTR)lpShareName, 0);
             7    if (NERR_Success == res)
             8    {
             9        printf("NetShareDel ok.\n");
            10    }

            11    else
            12    {
            13        printf("NetShareDel error: %u\n", res);
            14        if (ERROR_ACCESS_DENIED == res)
            15        {
            16            printf("The user does not have access to the requested information.\n");
            17        }

            18        if (NERR_NetNameNotFound == res)
            19        {
            20            printf("The share name does not exist.\n");
            21        }

            22    }

            23    return (res==NERR_Success);
            24}

            posted @ 2014-12-23 17:53 zhiye_wang 閱讀(281) | 評論 (0)編輯 收藏

                 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1/**//*  2 * ===============================================================...  閱讀全文
            posted @ 2014-12-23 17:47 zhiye_wang 閱讀(475) | 評論 (0)編輯 收藏

            20141129

            根據微軟http://support.microsoft.com/kb/231289 這篇文章沒有辦法解決Windows server 2008下隱藏指定盤符的問題
            這兩天搜索一些資料的總結,現在終于解決了這個問題.詳細步驟如下

            一 首先創建(針對域用戶的)組策略需要的數據

            1.首先在C:\Windows\SYSVOL\sysvol\xxx.com\Policies文件夾下,創建文件夾PolicyDefinitions.
            2.將%systemroot%\PolicyDefinitions\下所有文件(這個目錄的文件是針對本地用戶的)復制到
            C:\Windows\SYSVOL\sysvol\xxx.com\Policies\PolicyDefinitions下.
            3.修改C:\Windows\SYSVOL\sysvol\xxx.com\Policies\PolicyDefinitions\WindowsExplorer.admx
            這個文件來達到在Windows server 2008中隱藏指定盤符的功能.
            4.在WindowsExplorer.admx文件中查找字段NoDrives,添加相應的字符串可以設置隱藏指定的磁盤驅動器;查找字段NoViewOnDrive,并修改相應的字段,可以設置拒絕從Windows資源管理器訪問某個磁盤驅動器.

            下面以設置隱藏指定的磁盤驅動器為例:(下列黑體字我測試時設置的"只顯示Z,其他盤符不顯示

            以下是微軟幫助中的解釋:

            這項策略在客戶端計算機上只顯示指定的驅動器。這項策略所影響的注冊表項使用與 26 位二進制字符串(每一位代表一個驅動器號)相對應的十進制數字:

            00000000000111100000000000
            ZYXWVUTSRQPONMLKJIHGFEDCBA


            此配置對應于十進制數字 67108863,它會隱藏所有的驅動器。如果您要隱藏驅動器 C,將第三低位設置為 1,然后將二進制字符串轉換為十進制數字。

            沒有必要創建一個顯示所有驅動器的選項,因為清除復選框就完全刪除了“NoDrives”項,所有驅動器都會自動顯示。

            如果您要配置這項策略以顯示一個不同的驅動器組合,請創建相應的二進制字符串,將它轉換成十進制數字,并向 ITEMLIST 部分添加一個帶有相應的 [strings] 項的新項。例如,要隱藏驅動器 L、M、N 和 O,請創建下面的字符串

            100000000000111100000000000
            2ZYXWVUTSRQPONMLKJIHGFEDCBA


            并將其轉換成十進制。這個二進制字符串可轉換成十進制數字 30720

            這篇文章中的信息適用于:
            Microsoft Windows Server 2003 Standard Edition
            Microsoft Windows Server 2003 Enterprise Edition
            Microsoft Windows Server 2003 R2 Enterprise Edition (32-Bit x86)
            Microsoft Windows Server 2003 R2 Standard Edition (32-bit x86)
            Microsoft Windows 2000 Datacenter Server
            Microsoft Windows 2000 Advanced Server
            Microsoft Windows 2000 Professional Edition
            Microsoft Windows 2000 Server
            關鍵字:
            kbenv kbinfo KB231289

            5.之后修改C:\Windows\SYSVOL\sysvol\xxx.com\Policies\PolicyDefinitions\zh-CN\WindowsExplorer.adml(適用于中文Windows server 2008).

            如果你使用的是英文版需要修改:C:\Windows\SYSVOL\sysvol\xxx.com\Policies\PolicyDefinitions\en-US\WindowsExplorer.adml

            添加如下字符串.(黑體字)
            不限制z驅動器,其余驅動器全部限制

            注意:string id要跟WindowsExplorer.admx設置相同.

            6.現在在組策略中就可以看到這個設置了.

            ”本地組策略編輯器“->“用戶配置”→“管理模板”→Windows組件→“Windows 資源管理器”,在右側的窗格里雙擊“隱藏我的電腦中這些指定驅動器”項,

            20141201

            2.通過注冊表隱藏硬盤分區
            關鍵值是:NoDrives
            HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\新建鍵值NoDrives,

            posted @ 2014-12-23 17:43 zhiye_wang 閱讀(548) | 評論 (0)編輯 收藏

             1 #include "stdafx.h"
             2 #include "iostream"
             3 #include "assert.h"
             4 
             5 using namespace std;
             6 
             7 int mystrcmp(const char* dest, const char* src)
             8 {
             9     assert (dest!=NULL && src!=NULL);
            10     while (*dest++ == *src++)
            11     {
            12         if (*dest=='\0' || *src=='\0')
            13             break;    
            14     }
            15     return *dest > *src ? 1 : (*dest==*src ? 0 : -1);
            16 }
            17 
            18 int main(int argc, char* argv[])
            19 {
            20     printf("Hello World!\n");
            21     cout << mystrcmp("abc", "abcd");
            22     cout << endl;
            23     return 0;
            24 }
            輸出:
            Hello World!
            -1
            Press any key to continue
            posted @ 2014-06-12 10:12 zhiye_wang 閱讀(217) | 評論 (0)編輯 收藏

             1 #include "stdafx.h"
             2 #include "iostream"
             3 #include "assert.h"
             4 #include "string"
             5 
             6 using namespace std;
             7 
             8 char* mystrcat(char* dest, const char* src)
             9 {
            10     assert(dest!=NULL && src!=NULL);
            11     char* p = dest;
            12     while (*p!='\0') 
            13         p++;
            14     while (*p++ = *src++);
            15     *p = '\0';
            16     return dest;
            17 }
            18 
            19 int main(int argc, char* argv[])
            20 {
            21     printf("Hello World!\n");
            22     char buf[10] = "FU ";
            23     char test[4] = "CK!";
            24     mystrcat(buf, test);
            25     cout << buf << endl;
            26     return 0;
            27 }
            輸出:
            Hello World!
            FU CK!
            Press any key to continue
            posted @ 2014-06-12 09:59 zhiye_wang 閱讀(198) | 評論 (0)編輯 收藏

             1 #include "stdafx.h"
             2 #include "iostream"
             3 
             4 using namespace std;
             5 
             6 int isechol (const char* str)
             7 {
             8     int length = strlen(str);
             9     for (int i=0; i<length/2; i++)
            10     {
            11         // 0代表不是,1代表是
            12         if (str[i] != str[length-i-1])
            13         {    
            14             return 0;
            15         }
            16     }
            17     return 1;
            18 }
            19 
            20 int main(int argc, char* argv[])
            21 {
            22     printf("Hello World!\n");
            23     char buf[10] = "abcddcba";
            24     if (isechol(buf))
            25         cout << buf << " is echol" << endl;
            26     else
            27         cout << buf << " is not echol" << endl;
            28     return 0;
            29 }
            輸出:
            Hello World!
            abcddcba is echol
            Press any key to continue
            posted @ 2014-06-12 09:50 zhiye_wang 閱讀(405) | 評論 (2)編輯 收藏

             1 #include "stdafx.h"
             2 #include "iostream"
             3 #include "assert.h"
             4 
             5 using namespace std;
             6 
             7 char* mystrncpy(char* dest, const char* src, int n)
             8 {
             9     assert(dest!=NULL && src!=NULL);
            10     int count = 0;
            11     while (*src != '\0')
            12     {
            13         if (count >= n)
            14         {
            15             break;
            16         }
            17         dest[count++] = *src++;
            18     }
            19     dest[count] = '\0';
            20     return dest;
            21 }
            22 
            23 int main(int argc, char* argv[])
            24 {
            25     printf("Hello World!\n");
            26     char buf[10] = {0};
            27     mystrncpy(buf, "FUCK!", 4);
            28     cout << buf << endl;
            29     return 0;
            30 }

            輸出:
            Hello World!
            FUCK!
            Press any key to continue
            posted @ 2014-06-12 09:30 zhiye_wang 閱讀(534) | 評論 (0)編輯 收藏

             1 #include "stdafx.h"
             2 #include "iostream"
             3 #include "assert.h"
             4 
             5 using namespace std;
             6 
             7 char* mystrcpy(char* dest, const char* src); // 1 const
             8 
             9 
            10 int main(int argc, char* argv[])
            11 {
            12     printf("Hello World!\n");
            13     char buf[10] = {0};
            14     mystrcpy(buf, "FUCK!");
            15     cout << buf << endl;
            16     return 0;
            17 }
            18 
            19 char* mystrcpy(char* dest, const char* src)
            20 {
            21     assert(dest!=NULL && src!=NULL);   // 2 assert
            22     char* p = dest;
            23     while (*p++ = *src++);
            24     *p = '\0';                                    // 3 字符串結束
            25     return dest;
            26 }

            輸出:
            Hello World!
            FUCK!
            Press any key to continue
            posted @ 2014-06-12 09:11 zhiye_wang 閱讀(190) | 評論 (0)編輯 收藏

            僅列出標題
            共4頁: 1 2 3 4 
            欧美精品九九99久久在观看| 国产亚洲婷婷香蕉久久精品| 国产69精品久久久久777| 色欲综合久久躁天天躁蜜桃| 伊人久久大香线蕉AV一区二区| 国产精自产拍久久久久久蜜| 99久久无码一区人妻| 国产精品九九久久免费视频| 免费观看成人久久网免费观看| 麻豆亚洲AV永久无码精品久久| 午夜精品久久久久久久| 中文字幕日本人妻久久久免费 | 97久久精品人妻人人搡人人玩| 中文字幕人妻色偷偷久久| 伊人久久久AV老熟妇色| 国产成人久久精品激情| 色综合久久天天综合| 久久精品免费网站网| 久久婷婷五月综合色99啪ak| 中文字幕精品无码久久久久久3D日动漫 | 久久婷婷色综合一区二区| 久久强奷乱码老熟女网站| 久久99九九国产免费看小说| 久久精品人妻中文系列| 国内精品伊人久久久久AV影院| 国产精品久久久久久久午夜片| 伊人精品久久久久7777| 成人国内精品久久久久影院| 久久99精品久久久久久噜噜| 久久强奷乱码老熟女网站| 色综合色天天久久婷婷基地| 性做久久久久久免费观看| 丰满少妇高潮惨叫久久久| 亚洲国产精品综合久久一线| 久久久久亚洲av无码专区喷水| 久久久久亚洲av毛片大| 国产成人久久激情91| 欧美精品国产综合久久| 久久99精品久久久久久秒播| 麻豆AV一区二区三区久久 | 久久最新免费视频|