----- Original Message -----
Sent: Friday, May 30, 2003 3:43 AM
Subject: RE: [ActiveDir] how can i add the
value of the SchemIDGUID when I create a schemd object?
I'm
not the expert either, but I do have some experience with this.
Normally, like Rick said, GUIDs are simply assigned by the system upon object
creation. SchemaIDGUID is kind of a special case, though - it's the GUID
of the classSchema or attributeSchema object itself. If you ever want to
define some extended rights that apply to instances of your new class or
attribute, you'll need to know the SchemaIDGUID of the classSchema or
attributeSchema object in the forest.
Let's say you write a program that extends the schema, and it does NOT
specify the schemaIDGUID. The system will generate one for you when the
program is run. If you run it again in a different forest, those objects
will have a different value of schemaIDGUID in that forest. On the other
hand, if your program DOES specify a value for schemaIDGUID, then it will have
that value in every forest where your extension is installed. That way,
you can document what it should be, and can programatically create extended
rights for those objects in any of those forests.
The
value must be in the Base64-encoded format. There are a
couple of ways to generate a value to use:
1. Install the extension on a test
forest WITHOUT specifying the schemaIDGUID, copy the value that gets
automatically generated, and put in it your program for future use on other
forests
OR
2. Use the utility uuidgen.exe and
convert the output (format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) to
Base64.
I have done this successfully using LDIF
files to extend the schema, but have not tried it programmatically, although I
see no reason why it would not work the same.
Robbie, Gil, if I've misrepresented
something here please correct me !
Dave
-----Original
Message-----
From: zhaohu [mailto:[EMAIL PROTECTED]
Sent:
Wednesday, May 28, 2003 7:50 PM
To:
[EMAIL PROTECTED]
Subject: Re: [ActiveDir] how can i add
the value of the SchemIDGUID when I create a schemd
object?
Today i think that maybe the SchemaIDGUID can only
accept Base64, so i replaced the
{BCE8B3C4-9A94-4C34-8E76-AA4A682CBA2C} with Base64
xLPovJSaNEyOdqpKaCy6LA== , but the program
still failed:(
Maybe Rick Kingslan is right, i can't assign a
GUID to an object when i create the object, then what
about modifying the Value of SchemaIDGUID after i create the
object? i will test it after i send this
mail:)
----- Original Message -----
Sent: Wednesday, May 28, 2003 8:46
PM
Subject: RE: [ActiveDir] how can i add
the value of the SchemIDGUID when I create a schemd object?
I am FAR from the expert on this subject, but I do know a thing or
two. (Gil, where are you when we need you??? ;-)
)
The one thing that I see is that you're trying to force a
GUID. I don't think that you can do this. You can't assign a
GUID to an object - it's assigned when created. You're assigning an
OID, which is good - as long as it is unique and created via, say
OIDGEN.
Everything else looks fine. This probably explains why the
program runs without the statement in question, but won't when you have it
in. It's not supposed to be there.
Anyone else know schema manipulation with C++?
;-)
Rick Kingslan MCSE, MCSA, MCT
Microsoft MVP -
Active Directory
Associate Expert
Expert Zone -
www.microsoft.com/windowsxp/expertzone
this is some code in my program,
i create the schema object it:
----------------------------------------------------------------
hr = piSchema->Create( L"classSchema",
L"CN=TestClass", &piDisp );
.
.
.
hr =
piDisp->QueryInterface( IID_IADs, ( void** )&piIADsClass
);
if( SUCCEEDED( hr )
)
{
hr =
piIADsClass->Put( L"objectClass", _variant_t( L"classSchema" )
);
hr = piIADsClass->Put(
L"lDAPDisplayName", _variant_t( L"TestClass" )
);
hr = piIADsClass->Put(
L"governsID", _variant_t( L"1.3.6.1.4.1.1593.4.2.1.1.2.43" )
);
hr = piIADsClass->Put(
L"subClassOf", _variant_t( L"top" ) );
hr
= piIADsClass->Put( L"possSuperiors",_variant_t( L"organizationalUnit")
);
hr = piIADsClass->Put(
L"schemaIDGUID",_variant_t(L"{BCE8B3C4-9A94-4C34-8E76-AA4A682CBA2C}"));
hr
= piIADsClass->PutEx(ADS_PROPERTY_APPEND, L"mayContain",
varNames3);
.
.
.
----------------------------------------------------------------------
but it failed when i run the program, then if i
comment or delete " hr = piIADsClass->Put(
L"schemaIDGUID",_variant_t(L"{BCE8B3C4-9A94-4C34-8E76-AA4A682CBA2C}"));"
it runs well, who could tell me what is the matter with my promgram,
thanks very very
much:)