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 阅读(428) | 评论 (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 阅读(548) | 评论 (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 阅读(261) | 评论 (0)编辑 收藏

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1/**//*  2 * ===============================================================...  阅读全文
posted @ 2014-12-23 17:47 zhiye_wang 阅读(443) | 评论 (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 阅读(508) | 评论 (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 阅读(199) | 评论 (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 阅读(179) | 评论 (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 阅读(365) | 评论 (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 阅读(514) | 评论 (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 阅读(176) | 评论 (0)编辑 收藏

仅列出标题
共4页: 1 2 3 4