pax_global_header00006660000000000000000000000064151377354440014527gustar00rootroot0000000000000052 comment=23b93770731fa83ae164d5f6b159148075d3730a pydsinternals-1.2.5/000077500000000000000000000000001513773544400144335ustar00rootroot00000000000000pydsinternals-1.2.5/.github/000077500000000000000000000000001513773544400157735ustar00rootroot00000000000000pydsinternals-1.2.5/.github/FUNDING.yml000077500000000000000000000001261513773544400176120ustar00rootroot00000000000000# These are supported funding model platforms github: p0dalirius patreon: Podalirius pydsinternals-1.2.5/.github/banner.png000077500000000000000000000523731513773544400177630ustar00rootroot00000000000000‰PNG  IHDR>È™1GÃbKGDÿÿÿ ½§“ IDATxÚíÝœ$W]èýo ‹^¼è®<â#·©gE÷ Á]ï üÁw¢�€;(Q`…�ìÔ,!WÌ`@ñ*w;üRBb½�pwjv;DÀ¨LTÑt€¼Ù(p�âuÖÞ¹Äg}ɬâKIœç�=gæÔéªîªêê®ýy¿^IU×t�:uªêtï|ç{Ž'P2ßoÍêÕy½Üç¼eC/×EDz½Í-Z ØfhuçÑÊâû­e½zKÆ]ï³Ö»zi²A»´,Ó‡ŒOµGÆ'€‰!Ó3�‹zÙÕËuûu¯·¹Á yÈøP{d|˜ßoÍêÕ¿-±f~Ю^27( @Æ'€Ú#ãÀÄø~kE¯^WÁê¹sƒv­Ÿ™¬Ð ®"ÕDÆ'€Ú#ãÀÄø~««W×ôÎéåº^vEDz½Íu®.å"ã@í‘ñ `brd|¾F/çôòHÅOñ½4çÉÜ LŸj�À'€Úc¨[“u¨Û^oÓK(gÞz9§—fÛþ žú9½\×Ë®³”^os‹;€üÈøP{d|˜˜¢2>‡cV¯š Ð9½òj[.S¢÷®ôÚîÿD)ë÷òjç�Öº’�ÝwÖ;»?¿´ªºÝ7½èÙ´<êÊš´ã,wø~kN¯ºó„–9?hÚ¹Aíõu}ÎÌ h Ÿ5ö¼?z¯(9té•Ú FŠˆÚÖÁJ‘hPs¤ çÎ[$ô¼ôÿ¹¹7üŽJ®n|ì-/~W ãâÑõñüÿèÏEä)"n02ô¼ô£˜ §²Â”jÐÏ“‚ž)Ž“"£ôão½Šû@£åê6 CúFSÁ÷[]½z8Íû{½M/E™+zÕd/nèeW—±1�óšÕ«széf„î­è%¹O/#óž2?( ŽÈø¬¸+oúãÿ[”\ÍÂLŒ´ Š zÚo‰ü|§äÔÇéË(•è±íã<ëçS)Qò‰_ú ~É€Bxª¨+oºSõ '«�vf¥²“ýAOÕèŒ]�ÌÕ¹³Mõ=Ó'±œ˜Ÿ+Qr÷/¿„û@£�ñ ÉÆ”ñ¹¡W÷;?2s\Òem•xÞszÕ,MFèÁŠ^ª‹zi2A»ökæTŸs)à)ô”¾ád£ï1è)c zJ|ÐS”È3~î}JDÉÝo{)¿ô@.š*ä7Ý©ì!aûƒžÊ™CÓ^� FÆü\’æÞŒ?Nº §½ž"¸S¶Y¿çF‚Ÿê�ŒOMce+&ÙI7/dQŸ¾ßÚg½üÒ�bîÐeÍW°míópç5¯«8?è­z¹¬Û– P@éfh‚j-èi—T\ÐÓ.3²%!¸*NÙb•›¹*ýÇyúë~Cq7 +†º­7è¹£/i¿¥oì[+�¹»MÅ#¥/0™é8±ÁU‰ìè$ŠJª ®Î(ýþ×ݦ>ùö£d>L˜ï·fõj[/�¥Üõ.½œ›`u÷exï}~ó""½ÞæzUÚÜÉ”ì8Ks]éÕygYæü ÇìºØYÁi22>Kö‚›ûƒžî<™Ò7$¬= hr¶e4ÔFÚÇÙ)9õqúƒ«ö{£ÇÉ”¹jûý¯}™ŸH�ŒÏ’©èø±}AO•*)}ûFÊI zšõ´AO‰/'sÐÓ."9£ôû®�úÔÍ?Iæ'À˜ù~kA¯®èåު׹×Ûܰêÿ½zË�Ý:úý³ºŒZÌKiePše[Ÿ‡Ézuç5Ëý¨ž¹WÖ­ëq¨Ní h2>KtåMwF"Šnž¦½¦œ)7•È?ì¾I%=cJžQjÿ(~HݸrÒ×›>£ôû^ûî9î CÆg¤˜SDäï¿<1ûñ‡Þòa+^h¯Fœ}ÁÕØ §Š z ®É\M\�¨”Ü)"d}Œ�5/ã™:ŸG¯·¹¢ÏÇd>Nx«›�8W@.8mxQ/Mvæ²®ãÙ1œ·É¨ì8KS·C1ç9¬�ò²³KMæðO`’|–äù7ÝùNI=æ  §ˆÈG~á ODäò7ÿ¾•x™ô´�cÖR=­¦®ª‘ƒ«ßû3ÿ�ú“_yÁO0vAdžg< C/fß›Ã0|mÚc™2��Ï’x"×ôtJ9w¸Ù4¥ÑÀ¥Ä=M�R=û’8³=Å]¨—ëEäµU¬˜5/¤ˆ“!Ø zi²+“æ*=¬ÛbND¤×ÛìæhǶ^=éüh¯} ÙWVcÄÌ *¢³1­û`N/ÝyBG™ô˜ÝFö|¬Œ�ϲ �3OÐSäñyϾüM¿§úçÛT�ÓÝ}gbÐs<ÁUé;ŽRJ¾gùLûOW®nsãHciié]J©WŠ�E ›¤>ÃdgÒ§T�ϹCÂöσ™/ãq[¼ÿê‰zctÈØ�’“�ãdaª„š^z¡däàjŠŒÒ�²½™“"Òæ®0ˆ L(2ÆÔ¤¿@q|–$š7¦ï£yÊþ£7<ÿMÏ}ãï¾qç8;Ð,AO³�oÓlsƒž*1è9à8)‚žýÁUØuÍ5×´~øáó´€* ÃÐ ‚@A *š!:o­ïoRÛ›!U­aho²ËFÖcø~«£W�Õ¼­¶ô꺳4çyȹ_NŽp¯­Ð3&�ÀgiâçÁ´}øõ—_>âb³1£�V‰�oS¬}ÝrúƒžRLFi¤N=$3™R?ü0� vNœ8ñ½ÛÛÛ;RZ >Ë’0æ(CÜöR�f—Æ=�Xe$ð¨TÜe”Ú‡\•!ÁUS�€&ØÞÞþTÉU˜aß;ôò¬³}£JmÜëm®ˆˆø~kNo:â¼å¢~_êzû~Ëd-¦Íô¼XŶÉІgíkíû-ó£“9î52>1C”gPÐS)%?üKð÷£”\MôŒ&M�¢ûÚÇI z:NBFéÎjÜÏªÏ qÁ]´Àd�ñY’hv¤ôÜÙüÍyÊþÁ7ýî¯Ê¶›…é¤_J$N)iæÛÜys_Ð3i¸Þá¥î Ê(¨¡°_AÐÙ Œ–d_Ž}néõ6êÔø½Þ漈ˆï·L½Ír=Gq‡R¾ï>½œÓuØjȽl²6OòX7ƒ5�kÕ3r»ziž¥³úÙêr#™ív?µÏî‡Øp–gí6oPÿšù=Èüûn6å¿Û´Út ã³,æÁŒË¶ÌÂÛV¯Ö%'W£ÑG•a¾Í¸ gBæjŠŒR•:£ ÓãAÆg©úƒžÊI¡ü¡·~X}ä¿\‘:#à97|ðKºä�ÁUeWãçÓŒÿyrÐÓ.".O3mF©$Wj$ C/µ´´ô´ÕÕÕO×ù\ê–éSÿŽ^íŒñ0fXãy}ÌFeJ™ó±æúDýuõroÅëû#¾ß2óè®ÛÏwS3A­Œ3wî‘qµ­uL“Áng¯7±�µ´�æ;�¥M“M2>K£œ¬Êäy0è-Jõ{Î?¸&"ûÒ=%>è©b2A�lÌ�Ÿ¦Ì\ízÚçž-¸ P«o}Jý©ˆÈâââÍ"¥s ÐXd|–D9cÇ&=ͦËßüûjæá‡¾ýÚG¾WÞsnøànt±/i*yHÝhÐ3a¾Í”AÏØŒR=£ ®<ÏûZ¡Z|¿e2§>àüè½\°¶uõÒýkâwˆˆôz›Ë´(jfoCêÌ^ú~ëœýüÖ-Ô÷[f~ÎegYÆõ:¨—g¬m+ºž+ök2@P>KeÂ|Ió`š·]z±½ç‘ýÜ7ýÞî¾qCÂÆ=ÓW%Í|›Îñ†W£ç�˜Q*Êm–¾à*@ Ý "'­×K“Œ�ÏÒÄ ›³/éÄ“ƒ«Ñc&Wíúf®ö'¦Ž*Ep &Â0lAp2¥_+­R) ÛÍÜym³Ádtú~«£7méíd9Õ²_/ïÔÏl$ƒ»ªÏ¬•�¾âœGÕ˜ÌÓ“v»šú÷z›g¹sßݬûôz›s´@s|–iØ�°NÀ0Ý�°öšq�ËÁÁU•&¸jÊÉôT2Jル@<2>Ë’ôTÑ`ÒÏ̓©úÓ9ÅzgÊŒÒáÁU»Ã2JUÖŒÒÄs˜¼0 ½¼ï´ošr1Vû†ü|ÁZ_éõ67h6 VL÷Y‘êe&Zse^WÓö5™©÷êó¹Z·o‡[/³Ã4ÀèÈø,Iúy0%>(š0¦Šþ0rœ¾ŒR‰{äàjŠŒRÉ�Q ŸeJ5ftÞÎáó`Æ=ÅÊ.�+§�àªÄ ×+‘óJ7\¯]•¸¹P€B¬ëeR–Í^š�‹zYV†ä¡‚žG“™ØñýÖœùAÙŸÖ|ÁÇv¿œÑçgÚ¶Ã#€I"ã³,yçÁ´ƒ•}ÁHûíÉóm*Çýy®ŒR“­™)£tPpèGÆgiÒ΃)Ñ!aw7í–£¢oŒzÚ›ìã¸ûÚ¥Ç#í É(•¢3J€ô|¿eæð<äühK/;z¹ —�÷�£�K™ž½Þæ\ÉÏó¬^�×Ëe½ÜŸ±(“9ÚµÊ>¤Ïqcçaê]T¦çÖz×¾fÖµÛJ¨Ë!§�œsÚx”,[2?P 2>K2hLwNÌaó`Z%zF“Ñu•0ßf´ìè{“3JÝãÄf”æ ®ñÈø,UÐsP`òÒZÚy0ÕÀàjtèY\Ý9Î�ŒR÷8j`pUeÊ\Ò°2ÃÌžÞú½œÓ˽4™¢Z¨+sÅ^Z”m½L›¥h¿Ïô‡&Ð/µsqÑ9ÿŽÓ.yÚ4’jÊ´²å—�e–ö5LæçY瘆÷óÖæ»¿êõ6Û´ñ|–ä#ÿå ¯Šõzæëß;§Ä»36è)‘äL\Ui2Jã2W“‚«@Ÿè70£Ô™·s@F©]^êŒR\’YóÕuõr`fRL¦Ô ­ÔK¯·i2?MÖæ°Lï8um]f{ Um§é—bÜ¥— ýÖ8ÚtË®³ï·:Ö�ó´¯Èný!îZ`ç{Ë>ûù–ä9Ç%æ ˜ã T_ÐSYó„ºóFGÙµ‡ÑU™‚ž±ÁÕþ#d|"†Š$lö=k¶[AO¬t²>w~: £46¸ªz6ÑñãÇŸ:33ó錻}4 ÃË›ÒAü«ˆü»0 =î`r–––®SJeÊêú×ý×½·ÝvÛ?Ñz}mùkJ©ŸÊ¸[7 ÃgÓz(’ï·ôªy¶÷Žám½jæº3óÔ™¹¶ÈJd2!}¿5g>oô2KfâI]FÇ.s„~cŸõòXÆÝoÕuX¨JÛ:íÛÑË#)‹9h÷×½Þf‡»ØÉ€¾…¦ 8>ÑGÙcÍ&Í·™ôŒŽSë¼WEƱMzöW†Ðg}A°žáÃÃ<7÷vø…0 ßZ£öàvÆÄ-..žñ}ÑP¤³AïÃp¾ ÷Óöî_BMu_ŽZÉ:ÄíkrcÎ9Æa{éû-aÈ[ l½Þæ–~&ÍgòÙŒýƒˆH[/F¬Nžïçôr¹âíkÚ¦«—3¶m‡»ã@àÓñü›ºoóDýl$€çd2šõÌCµªäù+£E¥?N_pÕ9öÈÁÕ¥’!£Ô-;>èi=éß_ëÚñ5JD‰÷¸~é:@w‹ÈÓ+X/UÖ/ÌÊMºÏ<Ï{^Êó¼Ÿ^]]ý5Úd¨#eö?#´Ý}"ò]U¼¦J©÷­­­½”§iøÔ^psW] ²éÿb†jU ÕôÌ>¦�]ºû®AÁU•=¸*Y†ë•ôÃõÊ  gÌqÆ.Ú–æ>P_¼NÉöö˼֯½—§dW‚{d ¡�ÏÝ�ŠÈo—ql¥Ô¯Að«U|žöíÙ³çKô?ÍìË=Ï{I/¡/G i3¹®éõ6;9ŽqhÈÏÛ""¾ßZ×ÇØà²å1Ï ï·Læd–©MŽÙûš,Ç1ô‰}ÉÇœTûº™Ÿ÷¦Üu¿Þï�.ç,w+Š4CØAO‘�shêm£ Õ9ޏAѸ`dòqì²ÝrÊÈ(MzÚU‰ÉŠ­TÐ3ü¥D<ï7Ôÿ~õ/ò¤\ú%yÝ2ÉÀDÝ---ý¸¾�›ç©¿>U zºõ[ZZúyúrúrLÆT>¯¼¹û†ÜÜUÃçÁ”ø¡Z%ÛP­‰ÁÕH‰º'�rÐqú2J•[G§¾£W%9¸*y2JU\›N’ºT‡� §µM"ÿ½Imþçÿ<­ÏÊâââ±:ÿÒ™_˜£Î÷®Rêý_psw'r9ZÐ3&û1aLé8’nÌ!AÏÄã¨"3WãæBvœ‚žnp3Ò6ÉÛÔæ«”×zçTÌ3Ön·÷œ?þ¡"ËÌ;GÛ‰'¾i{{û¨Ç‚@1Oªìå/ù¿ÿÚ¯ýÚ/ס®e=O¾>†áå)Ž÷}"òɺ¶Yêüùó¥õߺDä›ê~ï¡ò^£— ziæŒ[)l9Sö†^&Í+zXDÄ÷[m}ì6—¨„ŽýŒ¦4o÷%“Pãù�MKùþCÜ’‡© |^ys÷Ó"ÒôÜ‘z~ÊÝlÀ¾ù4c�’bHØlj zJÂqŠ zÊ\Í2jöŒÒñPý×a§~1Yž¢b÷Sç¯QÞãßÕè_¸Að×çÏŸbeñËéS§NýƒˆxºnjÄsãæ•æºä¹þu¹Þg²½< Ã÷¸—––Þ®”zm‘uždûÑFYë†á§Lÿ³¸¸xÆó¼…:´YwŠÈÜ(exžw`uuõ¯ hóÇê:]/"7ÕñÞ@=LUàóù7ݽߓ‡ž*Ò?³f4—v~J«p3?e\P4RTúy0cë›|MzÚU‰›O3mF©Œu.Ôñˆ zËòt÷s¦ÍTD`á«_ýê7Ÿ9sæÂ8ꆡÁ‡D䊼e?~ü™§OŸþh�•0 _3ìM«««¯‘×éç`affæL}ÆCa>²ê}SA²µµµ«EäêªÿFÚ*¡Ü›Eäf†«Å8ôz›&ÓheŒÇØñýÖ‚Þô�!»œÔï_×ûŸåJ¥öýLš~boŠÝÓr©Û÷¬nß‹)Ûwlm{áè“MÚMQ—[ED{Ûý \E€f˜ªÀçŒ÷ІHŠ¡Zwö6?åà¡Zマƒ‚«IÇPN¦ÌU•.sU†qs ×Ó¾Ñë1.*]–gÊánE)Q½ÊóO5.Ó¤ª¿,�9Îó_âyÞ{sõ33�ÁÔÙ(ÏÜéÓ§;"Ò) 5öï£Ôqý’)s”zAðëa^[d½Nœ8ñÈíííkЇ{KKK‡”R÷Žz_�õ ÛÌ´œ¨™×S �s÷£ÌO©œ šô,jÌA™«¹2JSW³=3 \8“Õ©ú_'n‹8c·é×jãø�5éY\\ü©¼û†aèMú—ÏkkkïqÎ92ŽPKžç½¢Èg. CÏó¼ï¥Œq>OAüÝ(ç6Îk1bù¯ ‚à;‹¬OÞ çW¾ò•GOº_]]=KÐuÕëm®÷z›ër)KèÖ»ÌËî<�ÊוÝLÀT|¿5çû­¹ITÎ÷[³¾ßš­qûž•Ýy–˲¢ÿÛ+Ã3O�‰È± GÌ]8z`ŽÇ þf¦êl‡Õªâ‡jUÇj•4ó`ö½µÀàªSFiL†¦½:lŽÒ¡ÁÕñ]lŸ´—nöæ mnÖg̶ï·ÕÌÌ<'Ï~eÿâZ)õºrL‰»Ã0ôVWWß]tÁ«««ŸÞÞÞþÁŠž·_å¾iÄã|¾ìÆ ÃÐ{÷»ßý/e”ýù#ئb¨ÛÜÜU# Õ)mÔy0ãæ‰TnœRF®ÚõÍ\í?NL‹š ulÙžY†¶�›ËÓ¼N³­9”Rû²îS…l�µµµß ‚ ×¾ “ˆº˜Ä}zúôé;ó>Kãzžòµ&ý\빇UUÚ­†Ÿ?Ÿ÷<ïI<騡e½œÓËý ïëÒT@¥˜lÄ#ö™ñX"éç´4}J§¦íÛIy¾·r+"‰•õ|ÈYÊ�ÏÚ ‘^osƒV¬ýµŸuúÄ$ÎRz½M¾{]jË})ŸŸZµ™3*}D|™öØóýBh«Z]»a×mËùÎi÷…S}í¦$ã3nL•:kqó`J¤´‚«93WÕÈ™«’9¸ZäuŽfk¦ÚvÀ~;õt²CíánÿîêÆD@=ÏÛªkÝ ^¢©&=Œt•ž¥º=é‡F·¶¶ödZEh|Æç n¾ÓŠßÙÙ†zÓ˜æÁ´ ˆ9NŠ!a=sWf”ögø\¨ñó•¦ zªq='–åÙìÌÏëJú¿^ÚA¶ªÈó¼]]]ý@Ç%{±le?ËyÛŽ~¨Þ÷¦W¯·¹%"âû­½i]/ÝùäÎ6ìÔŸ�á½[Ü)¨è¿DDNfØg6ç±ò<ÿm½ìÔ´oìè¾Ñ<ÿ‡âú…^os…[±¬Ï¹…”»tì{aHÙ&£eÙ9ÆþŒÕ<é”{Ÿõr%m} h«Cö1SØ—ã0 úXs#VwY·ËÙ’î«YçÚÏç¼öqe›Õ;œ{r½†ÏSêgʺ'ÌçÈá¬mÖëmz:Ÿ¢ú‡A}ÄÄú‡1=?óÎòpÅ»muÎù·Ži³ >!Gº†ó ×po�Ǹè|÷]¯ãýžWã3>U4Úçd-4TkbPt§äÔÇÉ’Qêî40¸yo52J ºÂÒÌL›å)é²<ã¶)ëZŸ{sLV@†ÏλïÂÂÂ>Zº—½²‚ž£**p5�°¥¥¥;¸ûsß/WÓ ixÆç•7ÝùÏ—Öâ²UÂ<˜24k±/ƒÑYË?f4‹Ð-§�àªÄ ×ëvÓe”ÚUÉ1jQvÊwÛ;Ë6ó:gƨÈE„ŒÁjø²ˆ<:sG¸gÏ—¸†¨€? Ãð©U¨H³ïª’1™·í”R?Â# ‰È#sì÷"9Có¡,fN$ë/¯ôrCÿ|«‰ç ;»(ígÕ~ݧtô3·PÓ¾b=¦ POæó-m&ÑÀÏ ßo-[/Ûz¹·à:tŸ=ë¸ úG¦ã¾Œm•Ç~g9j]ÇÎÊÜÙ͆=6�C±—V–ß8ï�¢Ÿ§ÄgÊj׎s¾µ<Ÿ˜>b\ýƒÝGL²åšsÚäðoúšëì¥ï·Þ¡Ûj™�É¡×oÞéÿŠèÃÓØ›ÐÎêk×nr»7=ãóR$6kQ2f-ÆgD�ÓZK\µ7ÅϧÙÿÿ¥*>6}F©Ê?j¡Ü`¦¾M¹�ИìÐTÛÄÉ"EÙÂ0üzZ5¾ŸJ+Lg¶§uî™ògàkrîú,žÙ“* IDATˆLÁŸ™æÁ”lCµ¦šÓ”“jL{=Ýq⃑öÛ3d”4ªÝöýÇ)üKêŒÎ´ÛbËŠËütnÔZoÃði `Çï‹ÈóëPѪÍ�9BÆìåÜv@}Y™�Ì[TÛIJ8ìŒoßoݪWÓf9Óû™×Ën™@XYi“Ìô‹c2¼ºº^sú™:ËUÛµŸÓ«væ÷Þ«dî�{uý®Ö÷@§¦ÏT×9/úˆ‚û‡²ú«M̳s¸‚—î:·­DdŽï*•úÜ›j�Íø|á;>ñezF'Ô8T«Ê;¦ zöUdHpÕ-;úÞ,™«ní2³Weà°ÀÅK“å©’³ˆ«ŠÌ\Mš Uež u,Ô°ŒN±‚”·eÉ�QÌóY§N�ú‹ h`J(¥þºŠõÊ›õ�ªZ+Mb²¬LÊIiëeÖ¿ú7ïŸ×õ6Ù}>\UT\W/«’•¶×®—5×ÙÔñýÖ‚^=Sñªž±?j”ùÙ©Ø35ª*e5îuú-ñýÖ¡>oU¨M†9soÎOißרlìºkôŸÑ \úy0w ˆ™ŸRÅ̓)¹†„í®&'Ûp½ÑV\µ«‘z.T\�ÌÜ—vf¦ó:’™)ÉÛT¶¾²dȶš?/Jí›öñøñãÏäcÍÒÒÒÓ&y¼µµµï ÕôÝM©wÐ È«±Ÿîü•郞²c‚žù‚« å$üwƒRñCµJæ¡Z=³Îƒ9¨œQ2J×+Ñc�ôŒoßK?/þw×gßyÍú/±ZØÍÖ4ÇWC•öüž1Ù›‰e È"�ÔUÀ0‘*Ò=.Ï~ÛÛÛÿ{ZÛlmmí^îäÕÈÀg»Ýž:T«Ê6T«r²ÝP¢Š zfŸ3²¯Œ’¹-0p5å\¨qÃ�[l0Sdx€ÓÍÔT)£’\¾iµÿõãD?4ͧ«\9¥Ôa.£‘CÝþé×=ë«"Å̓©†Îƒ7ä©rã”’)¸ªb‚«v}sg®ª W‹sö�× ÈÞË8mšán�ŒÖø²Þ‡Ú[\\¼bmmíô ""$"O«jåÖÖÖ>Æ%uÒëm¶ED|¿5«7±È#îºï·ÌwfȵŽ>öW0¯—i†ú3C5/ë{t#Ë�|¿5çÜëy†;6Â5l;×p+g]Y/œåT ƒÛØ¡n=%ã<˜özê!aû¤iƒ«*9¸jÊÉ�QêžCÿ¾V[8eçž u×wóZ5|èÙ¤mC†»MÚ6.³Ô-uçyÞ‡hà’íííû'qœ†Îïi<œg§ÅÅÅyî@ ›Ff|ªUåœÓ*`øq"¥e ®ÊÐàªýÆaÃõf ®Z-˜!£´ï 40Û3Möfªm’1ctP)4‡çydŒ( ÃGæ ìzž÷a¾b¥»pô@[¯šÏ„u‘ÇÞvÿ­ä×ëm.ˆˆø~Ël:V`ñûõò{éû­H¦XŲVŠ´5¡}oXFÕÕÖsÐñ92÷ð!}�wFxžô²;B}¶²”a=ÿYlTåùõýÖ>û»AF&;q¹ {Áþ^2¯ëg®iÚLT“ Õ¶ëV NßîºÕiË,ýYW·ÕJÕúˆQï‰1ôË£öˆdÑFž¥¹Úl¿Þw^—¹.Í–§¯¸h·ó(YºÎõ;ëÖË÷[UëÓ&¢‘�ÏB†jMš¿26è9ø8}ÁUçØ£W%UF©dÈ(�œ1¸Z¤G|Õû±—wóZ•*(ÉÞL³ÍúY\F§Èð²êüØ(µ�Ÿ€ºÚÓÜSm¨Öø §YÏôTýåÈ àªÊ\MôtF¸•TÃõÊ  gÌqŠõå?;õÊ/ö]Õó¯úJtèY©@–§u¾ð£w{Oü�gÔñ‰ñ�ÏÎeú°³Ü�c÷"}�óóÂ_ðæ?j�:T«rdÑ÷ª ¥1AOå Û÷së§iŽ#*SFirÐÓ®JLVìdƒžrö�×|}üOÔ×ô3�9:·‰$Î šv[Rù»¯ŸÎ÷ÞÊøešh´ÿ�&`k\ÆçW¹ýÙÝWòõæ4ó`FJÔå¤ ®Ú›ìã¸utê›uݸŒRÉ2Œ®8j›ŽOÒ¼žêü5Vk¦Ž6åµî¶ÔeÅlC%\¼xñäÞ½{_OKͤ”z­`Z\8z`Á~ýØÛîïLà°Ãþªûˆ½¼pôÀ]VýæÎã�^mëå‚~?sëaêõz›m‘È\ZËös"ãÉmä\ VŸ2Ï�U 7èûh}ÏÑ–¾‡íyÌ>�¥ ßoÍÕñ¾Ÿ$ßoÍêÕërìn²ú&–eÝëm®èz›>áð�]ö:ýïJÅ.Á}ú¼ÖGt&ØG˜¶»3G1æûì8ûó96‰Lù´mfžƒ“9Úª©}á\Æ].ZíÊg̘Í4ðœö©¾a[%ÕP­Ñáa‹š³?x¨†Ì·)[ÜC%g”ö'ZN´êqAϤãÈÀa�‹òˆ¯zOô´²0£Y–1CÛªø¡mã†É�:W ._ Û†²Ý~ûíÒ @õ-..^‘ë3ã�øï´[ã2>UÂ\•ñCÂÆ  ;â<˜C‚ž‰ÇI1\oúÌU Š*'še.Ô¢$}?-ŒŸçy¯Î³ß©S§¢õ4�•éyÆÙ."cÏü\Îú•~Ày¸¿×~}áè�9}>d~bêYs=-ÛK+;Å,�±Is�Š4o>PŒÏ9}�´KxŽv²£¬û7í\~sÎgúe½¦wYצSb½W2öŸóÎ~U±@1rÑÍÙ?L¤�°2¢«4ÿ´yv³d|Ø6h‚ÉÙÓ¼SŠÏˆì66Ð))†„Í:¦$§ˆ §]tÚŒR•0\¯Ê<jèÙŸõ™f̾rdœF~<$¸[Ž·ý}ŸºéÒÔS�¥mèYózÀ¶"‡¶e¨ÛFñ<ïÿ ¨—æÍñ™%èé«Ü gQó`öe‚FÞ;<£Ty3¯úÔ�/}×4Ü�ó<Íë‚3:ã¶�R>�QŠLO×82?³Îíy—>ö†uÃ2=]d~Y™•¦ßßoíÓ«óÎó<Ž ó\³�éû­e]¿WiêïѪÜY³ãf¹zñ|¿•5«ü>}/t+v*¦>GRž÷\EÎc½a·Ôz…î…,Ÿû¦¼+0}jêŒh3JEG…ÈýoëûÒŠ`,;ÔmÜP­’f̾·ŽôŒ;NÊŒÒ{Þþ2oZnDõׯþZyÔƒÿHL“½9‘,ÏAe©¾{ �Ê—Däi£jfàsäy0ã²÷”§”‘ƒ«v}­‚ï¹qŠžç¯yƒˆz£Èƒ)�‚—i2FSm“tÙ¡}Û©>”ºÃó¼ZÀ´²²ïr>³ÊÄwÌɘmblæÛÍ9ïi[ïÛµËBqfwFö<˜}¡Fé›o36è ˜º%¨˜ gÎàjLÙÓôT½k—Ôùk”:�ºô+hhýçnS3Ü­Šß–”tËJQ~b½’Ž HËó¼[óì·´´tˆÖ`kàŸf%fèY'è¹³G_0Ò~Kt¾Më�ƒžYƒ«÷ÜøÒÔOõ÷¯ý�(uEi-œfØ�CÃn'”5âp´y3:‹Î¤†a7‚ìŸFJ½QD~„PW9æóŒsŸ^ÎXŸ´©|Q$~^ÑÇÞvÿ².ÓÌ�t,cuÈü de,ˆLl.ÐÒ3?­ù†ÍÇv–þ¥pÝŠÕ‡,šâªù½�×lÉÇ¿«a÷Qeî 3o«ù¬šff.[ë3ó�sÿÏæì¦ÁzŽó쵟ßo™¹>Wô½É÷’5tŽÏtAÏh\3n¾Í˜ §ê¬V9CÝf ®¦ zª®�›€t’�ÚN… ›!¸èÎ:Jù}e¥-Ð\¤h€ûi ò^H°5/ðô‰þ6&09,èéТƒéf® zFžå5ªuNI�>5Ú¶4£©ËJ›1šõ˜Y2Rëøè¨}t‰;ÞE€qG¦gA™Jóß?tž©ÇÞvÿ‚>g³©�ÌÏϘJž Ôd~žÕÇ{ö]Æ~ö>»¡oiîýNFW!²fzÍë¶Ÿ¯ØyÌÕ¬ÝÉZF*Ö縛­i¯Ï:ïÙKË�¬=Â÷&óÞ“z¹ ¯åŠý� Ðìö4öÌì §àtgþ´×TßtžÑ §0í ®ªh‰Ñÿg zª^ûÓ"êhÈ AÃ1=[XùEd©¦(¿†<ÏÛRª9«¯zÕ«¾ñ¡‡ʵo†+|<P/� |ª4AϘù6#�ËÄ §½)Ýq²=¯WåЊVdŒV%‹t@=2gQ¶‡zè7hPUÍô¼pôÀ¬^=’q×Ô(Vtæ§.«°6pÉ€¹@—­·™õ½9ûŒ¹ œÊBŽþå�ÛÏè“õ¹?I“‚ï:çsyÞYÎå|FQÌ÷§ }}– ø÷Þ~½¼E/ÛºìuûûÔ$FШ»™¦�жÚ~±Y�d¯ zFÞ(ƒ‚žn@pxpµ¯l¥ž—TÿÊ m«Ä Tº�ÅaÛb^«¸ìÐAÛÊWö¥-?a[Rù’e*â š@�ui ›Æe|~ô¯üíËßüûÑ ”R‚ž;o‘h:çÎOú‚žJõí(ÑⓃ«J‰|òí/ûp\Ý«ôÌ9í(CÃŽ4ôlÚÌRë˜y3WSe©2úcùÁ&žØÂ·çÙ/ Ãgs[ÍPá9=wºª\±��]3�<«�@§ô&/-ú‡žµƒžÊ zõ=“�“&è™4ÄmùAϤlM‰îVÅoK ºe¥(_rl‹Í,I—¥*)ÊJ™¥ È$ ÃçäÙoiiéPÕÏmÏž=Å&£™s|Ý×ÊÂ6KÐÓ*Ñþú §]õåØúV!è™yËQ2:Ç•åi•_ä\¤qÛ†–û§—R÷ŠˆGKihàSDbƒžô´3ÔmB9y2Jï¹ñe__±FrÎa AÃTCÃŽ°m`ùÔ#u@X/=y*Ý j0Ä­±�ñý+£°€!oEv‡½íê²ÆÙFh–Yš ?3ü­ï·ìgP¢CQ§ésº´&Pfˆj{æÌèV�ŒŸ±¨Æw¥Ž¾ŽÎuÜ_àaÚÿÖ´†C^±ê±2Íס¡�Ϙ M±c”*²ÞôTN–hdçè¾’&¸šœX^¶gƒ†ƒ¶åÍH�p–ª÷�Ý?£{¯yï¡Ô¢”) C²X€šøÜVoWž÷º¾¡gõÚ.åÆ)wß“õyiUÅìëŠ«Ë±Ê¸çÆ—Uä—˜#Úvð1Q KKK¥T¾ë±¶¶v/-L^†^™Ü ^†áoUñœ¾…+ LŸºdz^8z`^¯fýËãõ¢ê@æ'J²oR²²"E’³«Û""½Þf·N�he~.ëMw¦Üuž[€Øï ‡ìïµ"²wŒ‡3ÿÞØrŽi^ŸÕË ý¹¿¡ëhÞw˜+6ô»’i«Ù˜ï…íœÿKbʹ%æ{è‚®ÏÙijÿ™&žÔGO¾ðgãçÛÔaJ³n.û‚žæ½)‚ž1Çq3JãL>ÛS×e'¨gx*ý¶¼û +khùR`Yã¬+ª@)õí´05n¯jÅöìÙóE.09 žãÓ,¢�Çþ¡g�y;‚žî\žƒ‚žî•§¾P‰!ËSÆ’å¹Hÿ ] ` s ÔW�æô42¾ÿÖqÕ‰ÌOLØ¡ûdú yë/ìÓôwê}¾Qd7“².L6ƒï·îsžÅ${õûéýÏrK•—÷9½¡!çßåÀ8ù~ËŒF±nVæpÎ)§ë>Ç&s¥|gêX/;ÎwÆå”ߣòüûè^}¬«cêÑX3M>95h¾Mg^Ow°Zå u«úÖUêàê'o<Ú—}¦¸þO'Õ ýÁL7C1i›Äd;¦Ü¦$¾|ɳ-¡|I³-EùI™¥’í˜Þeû‘Z?/JíkÂs¿¸¸˜{è$@¹ò>ƒA¼‡ÖÐØŒÏ,AO7£0:og4èi�í8ýž6‰Vˆëòn³~ænK�Ešâ˜y3R«’¥ŠJð<ï´0uŽŠÈOV©Byæ+PO&³Pògz^´ÖçDÆ›¥xáèóÇnG2îÚw[’ù‰ ™Ë±ÏFÆ÷Ïæ8†;¯Wݬ;Ïà0û¸�z°æôͺ_›ÖR1Ù~Yç{¼K/Ûú™ëÒ”µë_;ö¿µ¬y^Í=a|Š˜ïõŒ>Æ–>öz“Û¶¹ŸÊÓ¿xô¼´°Â�VàkwÕþùÎOó=Ç}ò’nnJ‰™ÓRÌ})’~žË,óhJŽy4‡lš‘ª2f©È"e~ϦøLY‚à+4? ¿˜ÌÌLí/ÁÈ:FÓØŒÏ?n¿ðø¶ï¸ZõM¹ô´7YƒÞZAÍþÿgÉ(�¤aóUŽ+Ë3gù#eŒ‘å9¨¬ôå{—}¢ö¿¬ögŸç„ts¶%�Èš?ëp†Ý.ŠLlʺg|np—ˆëwë6w1P‚åŒï¿U?[ 4]³Xß9œï¯óοGÉíè²g›ÜGÏLÇ-£†=ÝÀ–ˆr†µ�Îë�¦ ®Nö<‡ÍW™°-)£36Ë3n[Î,RÉZ~s‘9fš9FcÛȯÝnï¡€K¶··Ÿ6mçL¶'0ºFÿ¢ÝÎÂŒ&oö=#™n‘u7è)ýSëç±ÁÕñŸ©Sï�¾¾ŒNI?‡¥Ê‘šz›dÌRÍX~!YªI£¨‚³=K8œ?þ!!ðˆÈéÓ§?S׬ϥ¥¥ŸË‘=ÿ/\u þ šŸò˜]†)³`Yÿ¢|eRmxáès¾gF(æ>½œÓmH– Œ<ÏS7ç±Ì~'sÔo¥¦íËœ�@ó™ÏØ´sùÖ=“ßoÍ[/Ófï�!ÓsšXÙ˜}߬;ÿ¦;™£Ø½Ní&¶]£3>ï¼áÈ¥_~:A°þ §µ“²‚•;ë*f^O{_5tÝñ6_¥³-õ|•)¶¥š“SRnËš¥ªJÈR•Ø,Oï²» V•ýŒ……Êü#{”  Ãc£?KKKK¿Rf½•R¿œã\ÍF×ü¡#I;Ó \º?Ïô7¾©²B >±ÝJHrvã ìJë=;ÛrÌ›9ré ²F(¬óš6ðQQ*sð°*sêíÙ³çKy÷­Úð’'Nœø¦S§NýCêB 5íË^#"?S—gæá‡~W h–*f~^8z`Îz¹?ãîëãn32=1NÖÜHË9vÏuÿ÷z›]}ì‹ÖæaÙõ>sv52[¡º˜ù±ÒÌçj®ÑO 0Ô†Ý_¥`¾ti: Ï¡I}/©@½Q+´­¿7nŒðï¨y»¬¦iüŸÑ,L³ÑVÆ=­vËé 7f.Ϙàê8Îj·I™“ƒ‰ƒ²5EfŒæ)_¥-?®^’âsÎk*y2F›Ëó¼\¿ ‚@]}õÕ~YõnZpn{{ûBÙuX\\|b…Ûõ+Ó~�L“¼˜PÆ5Ï{ÌN§³Á•ŠÑøŒÏî_äͽá»yŸvÐSÅ…(û zª¾ çðàj‘TŠ,Ï�ŠÉÀL;mYËÏ‘Ñ9J=Š,¿¯¬4™¥ýš4ÌmžŒOã�xÄßA0ñìÉQƒãªo†Þ(u+3“¶êAÂ0 ÿ�Ìé²½½ýgffþ²ÊÏQa•ú æa›€Še~æÙï}Ì�qµ™ž˜“é™%Ûù¢ˆH¯·ÙñØëî󜂙ã³nóß?¶¾å±·Ý¿¬û˜�Ÿ{ëãîë€éê呌ýB›¦úáœ8ßo™úîåÒU‡ù®êû­Y½)ËœŸ›Ü63Óq zªh°0úó,AÏÁÇõ⇱´-inʤmƒ²)Ssh槤ܦdƒŠ¤Ë,MSVÚÌÒé�7ãÓ�šTPªªAÏ"Ïo’¾I¯„ö¼œ¯Cõtúôéû•Reô)�Ñ‘ŦõA@홆“ì¾éG½Ã¿ø;v¤ÓZ� zJ|&h$†9$èég4yæ«CFgiY¤Y�™6Ë3ͶdMÊö,š 6(¥f×ÖÖÎ\öçEä;«Þ£f}Úm9ÎIƒ�žç½[)õòŒ»}DDxfkjmmí yïÕq>CyëôøÇ?þ‘\U”Áú+݃´Æä”™ùyáè“å4Ÿã˜�qµ ™ž˜PŸ7§WOæØ}¥ jtÜç83×gGD¤×Û\¨x;·õjÚŒÚsú¼6&Ðÿ®ð$…êf|ÿA§?®ãüÅÀ¸ä…§Ìï»ó\²J[á{o#홞SÕ!ͤÀ¤ôì›×³/â™ô´‹.2èYÅ¡a³n³Ê��Tò•?0ø›õ˜q×£ðÌSY?#þ1ÁgF�‹¸Ýnï9þüC5ëƒÛrž¯Ñ4[1JÊü4™�e.žsºìõ¢Û €LÏû¬õ9]O2=ae·ç¹‡/êe!™‚vf“ï·Lz8Ëóîû-SÖBÅÚÙÔ'kfA‡»Iisµ÷z›gõóoFöJ›éÝv?¿Ôãù÷ýÖ¾þ-‰É÷Ï4†¶gºNw7Èe=w~Öô´ßÍðLôTyëYÛ¡a33o–gÜ6²<ëõ$*õAÀ›¤2a>{–J©wAðÎi½‡VWW;Aäú¥©çy**RÊs<Ê3åìû@†�Kzïµ×^ûè|ðŸÍëóçÏ�Rõ­0 ¿‘+ŒÏT>?ö–{?ð ·+7è�kªHJ§ôTVÐÌ� 4:hž g݇†a.Òdyd{ÖS™®¢†¼EñíêîïyÞå«««¥u›íµoT΃>XH}³dhãàû­Y½š'Ãp�,Ö„3?óüev§ès.0ÓsÎjG2=áöuæ>3Ùš{s³,ÊË/í˜IDAT"ÒëmŽãþ2Ïã½yžw+ãbaŒuö9b·ï‘œÅu¸[�‘ª@Ìsœ6ãû°ÕŸ˜~¶rsðZ#lé:np»¡bæJø7Ú(ß«€ÒÌLÛ ì-Wéà‡ŠùÊ gämýåÄg”£ Ý Tº�ÅaÛÜ _Â6´-Ã1UR ReߦÊ—¬ÛÄ9ï!Û"õJÉóžG·±«.ÙrU¨§®��Š_[¥ÔA Tó\åá‡þ‚žÀdì™Æ“þø[¯òžõó¿©¢ózFÒ5�ìÍhÐÓÍTÖz´¤,Aφ m[d–jܶ’†¶õžü ætèÌ«ç‹ÈïUµ~ªË«DäUu ª…aè---}@)5_ƒ{�@å”ö?KKKoSJý,ý0Pž¿¨7óÜuh¾ñˆÉüÉžý›ùyá蓱p0GÕ »æEgz’å ›•…8j¢ˆÈ""½ÞæØúC@ì™æ“ÿÄ/ý„÷Ì׿_)' pgˆÛÄ çnjhÐ3)ÈVÇ,Ï!åW6ËÓ-+;‚žé¬®®¾[DÞ}âĉïÝÞÞþTYõ¨CÀÁÔ±"™Šÿ†á£b{*¥öÕåþ«X›b:¯ÿo…axW(Çžio€OüòOxÏø¹÷ý�ˆú!‰ÌëiM÷)Ñ § �Æg}F‚ž‰qϺ ëfoæÝ6¨ü¸àoÎcö••Ù›¼Ëîþ¯tÙœ:uêODdâAˆ:fXéaZ—ewH•‰ð½Þf[Ÿ×lÎçÝ )yÒYŠï·Ì9­ë决t™¶�u^ï/ð”ï³Ï@¤?èêg7ÏîfxÖv õÞÒõ^qû¡ ÎØ}á$ûßo™Ï‘•1ôy@Zgsìc¾tíïHEþ›Í £›ó¹žV×ÙßQ­¡ˆ;èÏö9ýYëM¾({¸/Eî~ÛK~XDäé?ûÞ¸±o%MÐSõ­çv’AÜ�ļ©•œ‹4;²<‹a‚Ç�îÌÌ̎០Ãði5o£ó5Æ`Í©0 _™c¿‡jÚ¦/»Á÷ÛEäÅ“<¾RªÓ„çW)õ’}®·³¹<‘ÅÅÅ«<ÏûÍ1âÁ0 ¿¶b׫)÷]¦ó˜™™ù>m Bà3âž_ºèúþ×ݶ3î­5˜­Ù´kHÐS ê6RXQCÏy_‘™¥… =;îàoz;ÇçôéÓˆ¹öÚkýàƒþsŽ¢Î†aøÝMm'7k5‚U Òì«”zÝÚÚÚMWÉÏøþß­`›Æ=º´´ôkJ©ŸJhËÎ(Ç\[[»º!Ïí'Däu>‡µµµÛí¾G?W!"—e)çñ�ü#ÛíöÃ?×FÜwM9�ŠhçØçœÈdþ:ýLögŽÌÏ«õþ]½ž¿ÞíxºæyN›ùI¦g5ñýVS¦ˆÜgºÏ›ø½Öëm.èvÍú¼rÐYVª� }^²<»'u²¥û”�Ù>VVЂ^võ~¹ÿpÕÊ`Ÿ¡ï1çaêeÎc]c#÷/3üÖ!§2Y²dx¢t½Þæºu¯^Ô«{3~Þwõþf´žnŽçdÁy>†=ÇçxŽí·ÿíceÏ®»ÿÞÊÛ÷Z}¹›¹¾7C1�}‰Àg‚O¾ýèx`xe »SV×ûÖ÷=›;ãöë¿þë_'�~a.‰ÈRYÇ÷<ï?D2܇umJýf]ÚvuuõÕ"òj|®žB+ÍCà³4n²ˆ¡a••¥|0Ý‚ú†,ï÷}ÿ6Z Êe͇—gþ»6-X¾ ™Ÿ&Ó³£ß¿ ·gþ‹_SFÁçÑqÎ#)ó“LOLÂz¹ R�9Œ­ÌOSŸëhg`ê˜Ïà[rì{‹îCÌw¸¤,¢CÎw„"“ÌwÏ�ßCŒýN˜ó:ç”mÎoË9¯}Ψº¼óåšìÌ;ž—®õÞYg™õ9¹ÁyÞÉøL߯]ç~dzFü¸ËÙ§›Ð¿îs®ù(Úú;ÚF“ŸÀgi² 3—™iý,Õ¶Aeå"Ÿœíö6­(�ÏÒ¤ ^¦ÉèL;ÜmªŒQb5×αs{VЀÌÏH¦§e!Ça:8�Žs&ó“LOŒÓE»O6ÿ]Ùz½Íeßouõ&SߪgT˜ì3¿Ø:·�û³x”9(MÖÖáIWÞdv[£Žt�:�b¿³<Ì킦)h¾Üq=/·:uìrÅ uxÈë"ÝZ‡ïÄE!ðY–‘‡£MÊM›Eš° ¨!Ÿ¥Ê¼ëж‘msêo^¬òe¤Ž7KÕ{òÇ<î€x¾ßZЫÌíÙ0VægG¿î&¼uC/³ÌÙÓ™àytôy˜ÌήÞN¦'Špѹ§Û"õ›cÒdLZËβì9ëÎ9íÛáÖF~î·œïrwÖô<Îêó˜Õ›ÖGønZ†ôyt¹+Q’9û;²3Ÿc^&;p�ËR{¯Ñ×rešNšÀgiTºŒÎTÛ$}FgšÌÒ"³Hóg“Ž Ä ðY–‰ ‹È"-4³4Û1�O€!–sìÃÜž52 ÓÓü|Á~}áèóÚÞn².îÓûœ-á<˜°Ì«kVo“Ùiž‡u{Y· Ï$Öy´í¥•f曳vÛ[ð½á¶1™PÀxŸû®~Î_¤7uÆð|O²ÿšsú-»O+sþâ‹NßÖÖõÞà.Džk¾\ó¼\7ÁçÂ<+\‘¡LŸq‡^©@�îp?0­}�ÏÒä fv,ÃÑ–ž¥ ô#ðYšiÚvÔŒQ �'k«]õ“2óDñWøÙ™95ÅʹpôÀ¬^�¥…¦Þœ^.W°nv&²ÉÚ /ˆdèw’úKëù6óýîÒÎ[öë¦dÍÖÐ ­WwÌï¯ZûnTà9_wži»¯^Ðˬ“n–ãÙ ž�Ý_uô¹Í;çc>“ŠÌl=çÜ“]» JêëºÚ‡ó_ÿ»1�gfË~î}¿µâüÛm¾€çå>§OXIù\tr\Çq¶Y§¬ûÊúN:ïôÙóÎróßå\¿u¾'Gø,MÚ¡aÍë¼CÃ�YJ–'€4ÿŠºxñëh@Y<š ªwB5&Ë3n[as‘Z7ëews¿ŽÑÒÒÒ”RóYö Ã�kÒpA(î¨ßo¥í³Í_¿K¯·9[B=Í_¥¦�å]×y®2@l†w’ ý=j£a畈¹ˆA?0£;”½òôq[úº�¥%Ó!ã³4n€sAÃ2FsG;Bæ*CÛ•Áô .|–fÜAC†¶0²GÐÐH%?kÆçßou�ýÍ’¹LÀT±¾ûlp^ý­Q«ëÅ5›Ÿeg–çÀò 8f!s‘&•dGà³4Ó‘åé=éξ9ÿÔ瞥âë *Ž?þõ™z4¥ÞL«R2™š+z¹7å~‡�å-æ¾ß:ç”ݵ—ÌaSßoÍex;sÑ&ŠÀgiŠּΰ-MvhÚm²C㞆÷ä�{""ê³Ï â TÔÌÌÌ?eyÿÚÚÚh5@™|–¥È¡m33›q¸ÛŒ©ƒ‚ž6ï²»=‚ŸÓÅd_ú~Ëd|ž, Øýzy�³}¬»ôj$#”LÄ\îÌð^Óîs4`fh‚²¨Ýÿ”²²)ím’n[_R )_”³¯ :ft¿´AOûìn�{¨– ²þAÂ{i5@ÙÈø,Í8‡žÍ˜ÑYH©½PWAücÖ}Â0|-Ȫ×Ûl‹DæŒ<<ÆÃŽ;†57hW/ÝŒPæ FÈø,MLÆe$›R¤? sȶ��J¿M% m«2nSâ=©›/{S©_å~*ãi@ø,Kìгi‡™²-qhÛ˜m¢R–•b[NÞS(_Ž!n% C†«TCÝ–*i˜YwèØ0/è ²ÊO;ï(€ZÉ“åi¬®®þ-¨ ŸeIHTC²7SoTVåç|ªÏ>ã 70y£=âP”^osK¯Î‹ˆø~kA¿^Ö˃%Vïpºø~ë¢^�d‚š×Öy€ !ðYšíïñþçHÃ̦zv„ŒÑÄ,Òø²ÔgŸ¡¼ËîÎ Yà~&g”€§ˆÈööö·ÑŠ€ª!ðYï ïýKõ·/M7mތθmEgyF¶e§>÷ôW§Ù=g@€eÔ€§™ž€ñëõ6;zµ#"âû­YýzN/ç�×""{K¨ª9¦;?è]ïûôëu{ÉÜ Œ�Ï2©í›Eäzý"]FgÚàeÞŒÎÜ™¥úUÖ¬Oåý*70>E; ‚ž€*#ðY"ï[ßÿZõ¿~âú‘•C‡±M»MrÎ;Ú/mðS}ö©2d{é-..þ­çy³E—KÐP–^osC¯vœåßoÒ«óβÌùA:Ë“º®Isƒîlc~Pò!ðY2ï[ßï©¿¹ÊD¥)CÛš f\Ð2mÀSûw /‚‰Èã>AO@ø¬õ yfõ³<íz¥<³lAÎ>Þew;÷¦Y‘CÕf~þ<ï»WWW™‡ PyÖ¼™fÙñýÖ>ýÚ�Ô¼®ÒÜ "ýóƒvõÒd‚v¹Ú$#ðYÞ·ýÖ³Ô~L–å·mYž…· CÜâyÞ;”R×Mú¸dyê†ÀgExOümO}áE»CÞæ¢6õ\¡ƒÊ-˳�ö è ˆˆÈêêêr |ð4‰5WfÇYŠHeçµ�o–×éúšùA»z™'Ôš€©Dà³B¼'~ÀSó¢÷ȶ:ziKÙCÛ–3Â&AO`òxêŽ_tW”úëQ£eyZïOµ-©¬Iھ»ì“ÀÕ/OÖù$ –Uóº¤þð¼×¯®®¾�€fðýVÚÏ‹»ÌJ¯·9GËŶ¥™ÔnwžÐý¬úØçÍpŸíÜkÜg€I!ã³¢¼oÿ=õW/T™3:ã‚—‰�qe‘å9ÍL sqqñežçÝF‹TÆ·ˆÈE¤”úÌÚÚÚÓhR@ÓlªõWWªlCÔš×)3Fû¶MÐWÿý£½ƒù®ruAð ˆ<2îgd|Nô:ä~@=ÏûéÕÕÕ_£ ÙÈøœx{›ùAMšŒÐìîEk½«—¹æ%ãPed|Ö€÷¿ç‰ˆ¨ûŸ§’‡¶Í9ÜmYCÛzêåÞ“ïyW·úÂ0ü³>®!WQ,¥Ô‹ÖÖÖÖi À4!ðY#Þ�] €þå\D=3}–§ÈðŒÑ‰ø7ﲻŕ¬/;Ó h)‘ÿþðÿ«Óé<@sPž^oó¬^5Ë‘ØùA«07è^kýˆ³]ïszÕÍå�©µAೆ¼ÿøÏ2ëê>WÅgtše̶ gy2g31Ì-í @•ð‹ôQŸ›»B<ïCéçÛ]õËÞ“ïþy®Àädœ{ѸZD¤×ÛìЂ»NîÜ sÖ��T¸ê÷éåÁ û0Ç'`¢ÈølïÉÝ‹ÌVþO‘GÈŸ�}hÛmõtï»îù$We!ãsŠ©Ï>ãYþFuƒ÷”{Ú´@uù~kK¯îͱû;ôr‹–¬3/èÁšŸÇ""½Þæ<—0 d|N1ï²»_#"¯¡%Pw>€fX×Ëc9ö½ŽæÃïI&b†&Pw>ÔžGõçû­9½z'­�’�éõ6gi À$‘ñ  öÈøÄ÷[+zõ:ZtÑZŸéõ6ÏÒ,€I"ã@í‘ñ 4™Ÿ˜“é9g6�é ( Ÿj�ŒO Á|¿5§W—õò­‚˜ ÏŽ^¶EDz½Í-šP62>ÔŸ ¿¾J)¹á†v®õç>÷9OD䪫®ÊTØí·ß.""O~ò“•ÙvòäI%"âyžˆˆ¢ÉêÃʆÙaþN@µø¬ñµk·ÛžÈ¥@æUW]%Ÿÿüç=‘Ç=îqžˆÈ¿øEODä1�yÌÎuþÇüÇÈ5ÿ†oø†T÷À?ýÓ?E‚š�yÌc”U¦ÒÇUú¸JDäIOz’ºýöÛw¥ív[ ÁQ€Ê ð‰ |*ïÿ,%“ ‘lÿIEND®B`‚pydsinternals-1.2.5/.github/workflows/000077500000000000000000000000001513773544400200305ustar00rootroot00000000000000pydsinternals-1.2.5/.github/workflows/python-pip-build.yml000066400000000000000000000023761513773544400237670ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a single version of Python # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Python pip build on: push: branches: [ "main" ] pull_request: branches: [ "main" ] permissions: contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.11 uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 wheel if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=25 --max-line-length=512 --statistics - name: Pip build run: | python3 setup.py sdist bdist_wheel - name: Pip install run: | python3 setup.py install pydsinternals-1.2.5/.gitignore000077500000000000000000000060061513773544400164300ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock # pdm # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. #pdm.lock # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it # in version control. # https://pdm.fming.dev/#use-with-ide .pdm.toml # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ pydsinternals-1.2.5/LICENSE000077500000000000000000000020721513773544400154440ustar00rootroot00000000000000MIT License Copyright (c) 2025 Rémi GASCOU (Podalirius) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pydsinternals-1.2.5/Makefile000077500000000000000000000012751513773544400161030ustar00rootroot00000000000000.PHONY : all clean build upload all: install clean clean: @rm -rf `find ./ -type d -name "*__pycache__"` @rm -rf ./build/ ./dist/ ./pydsinternals.egg-info/ docs: @python3 -m pip install pdoc --break-system-packages @echo "[$(shell date)] Generating docs ..." @PDOC_ALLOW_EXEC=1 python3 -m pdoc -d markdown -o ./documentation/ ./pydsinternals/ @echo "[$(shell date)] Done!" install: build pip install . --break-system-packages build: python3 -m pip uninstall pydsinternals --yes --break-system-packages python3 -m pip install .[build] --break-system-packages python3 -m build --wheel upload: build python3 -m pip install .[twine] --break-system-packages python3 -m twine upload dist/*pydsinternals-1.2.5/README.md000077500000000000000000000024451513773544400157220ustar00rootroot00000000000000![](./.github/banner.png)

# pydsinternals - Directory Services Internals Library

MIT License Build Status PyPI YouTube Channel Subscribers

A Python native library containing necessary classes, functions and structures to interact with Windows Active Directory. ## Installation ``` python3 -m pip install dsinternals ``` ## Contributing Pull requests are welcome. Feel free to open an issue if you want to add other features. ## Credits This code base was heavily inspired by [MichaelGrafnetter](https://twitter.com/MGrafnetter)'s [DS Internals](https://github.com/MichaelGrafnetter/DSInternals) library. ## References - https://github.com/MichaelGrafnetter/DSInternals pydsinternals-1.2.5/__init__.py000077500000000000000000000000001513773544400165350ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/000077500000000000000000000000001513773544400167615ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/Utils.py000077500000000000000000000130751513773544400204440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : Utils.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 import base64 import binascii import hashlib import struct from dsinternals.system.DateTime import DateTime from dsinternals.common.data.hello.KeyCredentialVersion import KeyCredentialVersion from dsinternals.common.data.hello.KeySource import KeySource def ConvertToBinaryIdentifier(keyIdentifier, version: KeyCredentialVersion): if version in [KeyCredentialVersion.Version0.value, KeyCredentialVersion.Version1.value]: return binascii.unhexlify(keyIdentifier) if version == KeyCredentialVersion.Version2.value: return base64.b64decode(keyIdentifier + "===") else: return base64.b64decode(keyIdentifier + "===") def ConvertFromBinaryIdentifier(keyIdentifier, version: KeyCredentialVersion): if version in [KeyCredentialVersion.Version0.value, KeyCredentialVersion.Version1.value]: return binascii.hexlify(keyIdentifier).decode("utf-8") if version == KeyCredentialVersion.Version2.value: return base64.b64encode(keyIdentifier).decode("utf-8") else: return base64.b64encode(keyIdentifier).decode("utf-8") def ConvertFromBinaryTime(rawBinaryTime: bytes, source: KeySource, version: KeyCredentialVersion): """ Documentation for ConvertFromBinaryTime Src : https://github.com/microsoft/referencesource/blob/master/mscorlib/system/datetime.cs """ timeStamp = struct.unpack(' bytes: """ Documentation for ConvertToBinaryTime Src : https://github.com/microsoft/referencesource/blob/master/mscorlib/system/datetime.cs """ # AD and AAD use a different time encoding. if version == KeyCredentialVersion.Version0.value: return struct.pack('" % id(self)) print(" | Exponent (E): %s" % hex(self.exponent)) print(" | Modulus (N): %s" % hex(self.modulus)) print(" | Prime1 (P): %s" % hex(self.prime1)) print(" | Prime2 (Q): %s" % hex(self.prime2)) pydsinternals-1.2.5/dsinternals/common/cryptography/SecretEncryptionType.py000077500000000000000000000015551513773544400275310ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SecretEncryptionType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SecretEncryptionType(Enum): """ SecretEncryptionType """ # TODO: Add support for SAM encryption types # Database secret encryption using PEK without salt. # Used until Windows Server 2000 Beta 2 DatabaseRC4 = 0x10 # Database secret encryption using PEK with salt. # Used in Windows Server 2000 - Windows Server 2012 R2. DatabaseRC4WithSalt = 0x11 # Replicated secret encryption using Session Key with salt. ReplicationRC4WithSalt = 0x12 # Database secret encryption using PEK and AES. # Used since Windows Server 2016 TP4. DatabaseAES = 0x13 pydsinternals-1.2.5/dsinternals/common/cryptography/X509Certificate2.py000077500000000000000000000062471513773544400262640ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : X509Certificate2.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 import os import OpenSSL try: from Cryptodome.PublicKey import RSA except ImportError: from Crypto.PublicKey import RSA from dsinternals.common.cryptography.RSAKeyMaterial import RSAKeyMaterial from cryptography.hazmat.primitives.serialization import pkcs12, PrivateFormat from cryptography.hazmat.primitives import hashes class X509Certificate2(object): """ class X509Certificate2 """ def __init__(self, subject, keySize=2048, notBefore=0, notAfter=365): self.key = None # create rsa key pair object self.key = OpenSSL.crypto.PKey() # generate key pair or 2048 of length self.key.generate_key(OpenSSL.crypto.TYPE_RSA, keySize) # create x509 certificate object self.certificate = OpenSSL.crypto.X509() # set cert params self.certificate.get_subject().CN = subject self.certificate.set_issuer(self.certificate.get_subject()) # Validity self.certificate.gmtime_adj_notBefore(notBefore * 24 * 60 * 60) self.certificate.gmtime_adj_notAfter(notAfter * 24 * 60 * 60) self.certificate.set_pubkey(self.key) # self-sign certificate with SHA256 digest and PKCS1 padding scheme self.certificate.sign(self.key, "sha256") pem_key = OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_PEM, self.key) pubkey = RSA.importKey(pem_key) self.publicKey = RSAKeyMaterial( modulus=pubkey.n, exponent=pubkey.e, keySize=pubkey.size_in_bits(), prime1=0, prime2=0 ) def ExportPFX(self, path_to_file, password): if len(os.path.dirname(path_to_file)) != 0: if not os.path.exists(os.path.dirname(path_to_file)): os.makedirs(os.path.dirname(path_to_file), exist_ok=True) encryption = ( PrivateFormat.PKCS12.encryption_builder(). kdf_rounds(50000). key_cert_algorithm(pkcs12.PBES.PBESv1SHA1And3KeyTripleDESCBC). hmac_hash(hashes.SHA256()).build(password.encode()) ) p12 = pkcs12.serialize_key_and_certificates(b"", self.key.to_cryptography_key(), self.certificate.to_cryptography(), None, encryption) with open(path_to_file + ".pfx", "wb") as f: f.write(p12) def ExportPEM(self, path_to_files): if len(os.path.dirname(path_to_files)) != 0: if not os.path.exists(os.path.dirname(path_to_files)): os.makedirs(os.path.dirname(path_to_files), exist_ok=True) cert = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, self.certificate) with open(path_to_files + "_cert.pem", "wb") as f: f.write(cert) privpem = OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, self.key) with open(path_to_files + "_priv.pem", "wb") as f: f.write(privpem) def ExportRSAPublicKeyDER(self): raise NotImplementedError("") def ExportRSAPublicKeyBCrypt(self): return self.publicKey pydsinternals-1.2.5/dsinternals/common/cryptography/__init__.py000077500000000000000000000002501513773544400251150ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/data/000077500000000000000000000000001513773544400211625ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/data/DNWithBinary.py000077500000000000000000000045531513773544400240500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : DNWithBinary.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 import binascii class EmptyRawDNWithBinary(Exception): """Raised when the input value is too small""" pass class InvalidBinaryDataLength(Exception): """Raised when the input value is too large""" pass class InvalidNumberOfPartsInRawDNWithBinary(Exception): """Raised when the input value is too large""" pass class DNWithBinary(object): """ The DNWithBinary class represents the DN-Binary LDAP attribute syntax, which contains a binary value and a distinguished name (DN). """ # String representation of DN-Binary data: B::: _StringFormat = "B:%d:%s:%s" _StringFormatPrefix = b"B:" _StringFormatSeparator = b":" DistinguishedName = b"" BinaryData = b"" def __init__(self, DistinguishedName: str, binaryData: bytes): super(DNWithBinary, self).__init__() assert (len(DistinguishedName) != 0) assert (len(binaryData) != 0) self.DistinguishedName = DistinguishedName self.BinaryData = binaryData @classmethod def fromRawDNWithBinary(cls, rawDNWithBinary:bytes): if len(rawDNWithBinary) == 0: raise EmptyRawDNWithBinary("rawDNWithBinary cannot be empty.") numberOfColons = rawDNWithBinary.count(cls._StringFormatSeparator) if numberOfColons != 3: raise InvalidNumberOfPartsInRawDNWithBinary("rawDNWithBinary should have exactly four parts separated by colons (:).") _B, size, binaryPart, DistinguishedName = rawDNWithBinary.split(cls._StringFormatSeparator) size = int(size) if len(binaryPart) != size: raise InvalidBinaryDataLength("Invalid BinaryData length. The length specified in the header does not match the data length.") binaryPart = binascii.unhexlify(binaryPart) return cls(DistinguishedName, binaryPart) def toString(self): hexdata = binascii.hexlify(self.BinaryData).decode("UTF-8") # return self._StringFormat % (len(self.BinaryData) * 2, hexdata, self.DistinguishedName.decode("UTF-8")) return self._StringFormat % (len(self.BinaryData) * 2, hexdata, self.DistinguishedName) def __repr__(self): return self.toString()pydsinternals-1.2.5/dsinternals/common/data/InstanceType.py000077500000000000000000000023511513773544400241460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : InstanceType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class InstanceType(Enum): """ InstanceType A bit field that dictates how the object is instantiated on a particular domain controller. The value of this attribute can differ on different replicas even if the replicas are in sync. This attribute can be zero or a combination of one or more of the following bit flags. See: https://msdn.microsoft.com/en-us/library/cc219986.aspx """ # The object is not writable on this directory and is not a naming context. NONE = 0 # The head of naming context. NamingContextHead = 0x00000001 # This replica is not instantiated. NotInstantiated = 0x00000002 # The object is writable on this directory. Writable = 0x00000004 # The naming context above this one on this directory is held. NamingContextAbove = 0x00000008 # The naming context is being constructed for the first time via replication. Constructing = 0x00000010 # The naming context is being removed from the local directory system agent (DSA). Removing = 0x00000020 pydsinternals-1.2.5/dsinternals/common/data/__init__.py000077500000000000000000000002501513773544400232730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/data/dpapi/000077500000000000000000000000001513773544400222575ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/data/dpapi/DPAPIBackupKeyType.py000077500000000000000000000006101513773544400261270ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : DPAPIBackupKeyType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class DPAPIBackupKeyType(Enum): """ DPAPIBackupKeyType """ Unknown = 0, LegacyKey = 1 RSAKey = 2 PreferredLegacyKeyPointer = 3 PreferredRSAKeyPointer = 4 pydsinternals-1.2.5/dsinternals/common/data/dpapi/RoamedCredentialFlags.py000077500000000000000000000006721513773544400270200ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : RoamedCredentialFlags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class RoamedCredentialFlags(Enum): """ RoamedCredentialFlags """ Tombstone = (1 << 0) Unreadable = (1 << 1) Unwritable = (1 << 2) Unroamable = (1 << 3) KnownType = (1 << 4) EncryptionKey = (1 << 5) pydsinternals-1.2.5/dsinternals/common/data/dpapi/RoamedCredentialType.py000077500000000000000000000012671513773544400267060ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : RoamedCredentialType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class RoamedCredentialType(Enum): """ RoamedCredentialType """ # DPAPI Master Key DPAPIMasterKey = 0 # CAPI RSA Private Key RSAPrivateKey = 1 # CAPI DSA Private Key DSAPrivateKey = 2 # CAPI Certificate CryptoApiCertificate = 3 # CAPI Certificate Signing Request CryptoApiRequest = 4 # CNG Certificate CNGCertificate = 7 # CNG Certificate Signing Request CNGRequest = 8 # CNG Private Key CNGPrivateKey = 9 pydsinternals-1.2.5/dsinternals/common/data/dpapi/__init__.py000077500000000000000000000002501513773544400243700ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/data/hello/000077500000000000000000000000001513773544400222655ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/data/hello/CustomKeyInformation.py000077500000000000000000000154361513773544400270040ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : CustomKeyInformation.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 import struct import io from dsinternals.common.data.hello.KeyFlags import KeyFlags from dsinternals.common.data.hello.CustomKeyInformationVolumeType import CustomKeyInformationVolumeType from dsinternals.common.data.hello.KeyStrength import KeyStrength class CustomKeyInformation(dict): """ Represents the CUSTOM_KEY_INFORMATION structure. See: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/701a55dc-d062-4032-a2da-dbdfc384c8cf """ Version: int = 0 Flags: KeyFlags = KeyFlags.NONE CurrentVersion: int = 1 ShortRepresentationSize: int = 2 ReservedSize: int = 10 VolumeType: CustomKeyInformationVolumeType = None # Specifies whether the device associated with this credential supports notification. SupportsNotification: bool = None # Specifies the version of the File Encryption Key (FEK). FekKeyVersion: bytes = None # Specifies the strength of the NGC key. Strength: KeyStrength = None # Reserved for future use. Reserved: bytes = None # Extended custom key information. EncodedExtendedCKI: bytes = None def __init__(self, flags=KeyFlags.NONE): super(CustomKeyInformation, self).__init__() self.Version = self.CurrentVersion self.Flags = flags self["Version"] = self.Version self["Flags"] = self.Flags @classmethod def fromBlob(self, blob: bytes, version): # Validate the input assert (len(blob) >= self.ShortRepresentationSize) self = CustomKeyInformation() stream_data = io.BytesIO(blob) # An 8-bit unsigned integer that must be set to 1: self.Version = None self.Version = struct.unpack(' bytes: stream_data = b"" stream_data += struct.pack("" % id(self) pydsinternals-1.2.5/dsinternals/common/data/hello/CustomKeyInformationVolumeType.py000077500000000000000000000010661513773544400310300ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : VolumeType.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 from enum import Enum class CustomKeyInformationVolumeType(Enum): """ Specifies the volume type. See: https://msdn.microsoft.com/en-us/library/mt220496.aspx """ # Volume not specified. NONE = 0x00 # Operating system volume (OSV). OperatingSystem = 0x01 # Fixed data volume (FDV). Fixed = 0x02 # Removable data volume (RDV). Removable = 0x03 pydsinternals-1.2.5/dsinternals/common/data/hello/KeyCredential.py000077500000000000000000000414401513773544400253700ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KeyCredential.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 import binascii import io import struct from dsinternals.common.data.hello.KeyUsage import KeyUsage from dsinternals.common.data.hello.KeyFlags import KeyFlags from dsinternals.common.data.hello.KeySource import KeySource from dsinternals.common.data.hello.KeyCredentialVersion import KeyCredentialVersion from dsinternals.common.data.hello.KeyCredentialEntryType import KeyCredentialEntryType from dsinternals.common.cryptography.X509Certificate2 import X509Certificate2 from dsinternals.common.cryptography.RSAKeyMaterial import RSAKeyMaterial from dsinternals.common.data.hello.CustomKeyInformation import CustomKeyInformation from dsinternals.common.data.DNWithBinary import DNWithBinary from dsinternals.system.DateTime import DateTime from dsinternals.Utils import ComputeKeyIdentifier, ConvertFromBinaryTime, ConvertToBinaryTime, ConvertFromBinaryIdentifier, ConvertToBinaryIdentifier, ComputeHash from dsinternals.system.Guid import Guid class KeyCredential(object): """ This class represents a single AD/AAD key credential. In Active Directory, this structure is stored as the binary portion of the msDS-KeyCredentialLink DN-Binary attribute in the KEYCREDENTIALLINK_BLOB format. The Azure Active Directory Graph API represents this structure in JSON format. https://msdn.microsoft.com/en-us/library/mt220505.aspx """ # Minimum length of the structure. MinLength = 4 # Version # V0 structure alignment in bytes. PackSize = 4 # Defines the version of the structure. Version: KeyCredentialVersion = KeyCredentialVersion.Version0 # Version 1 keys had a guid in this field instead if a hash. Identifier: str = "" Usage: KeyUsage = None LegacyUsage: str = "" Source: KeySource = None """ def bool IsWeak: get { var key = self.RSApublicKey return key.HasValue && key.Value.IsWeakKey() } } # Key material of the credential. def byte[] RawKeyMaterial: def RSAParameters? RSApublicKey: get { if(self.RawKeyMaterial == null) { return null } if(self.Usage == KeyUsage.NGC || self.Usage == KeyUsage.STK) { # The RSA def key can be stored in at least 3 different formats. if (self.RawKeyMaterial.IsBCryptRSApublicKeyBlob()) : # This def key is in DER format. This is typically true for device/computer keys. return self.RawKeyMaterial.ImportRSApublicKeyBCrypt() } else if(self.RawKeyMaterial.IsTPM20publicKeyBlob()) : # This def key is encoded as PCP_KEY_BLOB_WIN8. This is typically true for device keys protected by TPM. # The PCP_KEY_BLOB_WIN8 structure is not yet supported by DSInternals. return null } else if(self.RawKeyMaterial.IsDERpublicKeyBlob()) : # This def key is encoded as BCRYPT_RSAKEY_BLOB. This is typically true for user keys. return self.RawKeyMaterial.ImportRSApublicKeyDER() } } # Other key usages probably do not contain any def keys. return null } } def string RSAModulus: get { var publicKey = self.RSApublicKey return publicKey.HasValue ? Convert.ToBase64String(publicKey.Value.Modulus) : null } } """ CustomKeyInfo: CustomKeyInformation = None DeviceId: Guid = None # The approximate time this key was created. CreationTime: DateTime = None # The approximate time this key was last used. LastLogonTime: DateTime = None # Distinguished name of the AD object (UPN in case of AAD objects) that holds this key credential. Owner: str = "" @classmethod def fromX509Certificate2(cls, certificate: X509Certificate2, deviceId: Guid, owner: str, currentTime: DateTime = None, isComputerKey=False): assert (certificate is not None) publicKey = certificate.ExportRSAPublicKeyBCrypt() return cls(publicKey, deviceId, owner, currentTime, isComputerKey) def __init__(self, publicKey: RSAKeyMaterial, deviceId: Guid, owner: str, currentTime=None, isComputerKey: bool = False): # Process owner DN/UPN assert (len(owner) != 0) if type(owner) == str: self.Owner = owner elif type(owner) == bytes: self.Owner = owner.decode("UTF-8") # Initialize the Key Credential based on requirements stated in MS-KPP Processing Details: self.Version = KeyCredentialVersion.Version2 self.Identifier = ComputeKeyIdentifier(publicKey.toRawBytes(), self.Version) self.KeyHash = None if currentTime is not None: if type(currentTime) == int: self.CreationTime = DateTime(currentTime) elif type(currentTime): self.CreationTime = currentTime else: pass else: self.CreationTime = DateTime() self.RawKeyMaterial = publicKey self.Usage = KeyUsage.NGC self.LegacyUsage = None self.Source = KeySource.AD self.DeviceId = deviceId self.computed_hash = "\x00"*16 # Computer NGC keys have to meet some requirements to pass the validated write. # https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/f70afbcc-780e-4d91-850c-cfadce5bb15c # The KeyApproximateLastLogonTimeStamp entry must not be present. # Although the spec says that the CustomKeyInformation entry must not be present, # in practice it seems that Windows adds it with KeyFlags.MFANotUsed. if isComputerKey: self.CustomKeyInfo = CustomKeyInformation(KeyFlags.MFANotUsed) else: self.LastLogonTime = self.CreationTime self.CustomKeyInfo = CustomKeyInformation(KeyFlags.NONE) @classmethod def fromDNWithBinary(cls, dnWithBinary: DNWithBinary): # Input validation """Validator.AssertNotNull(blob, nameof(blob)) Validator.AssertMinLength(blob, MinLength, nameof(blob)) Validator.AssertNotNullOrEmpty(owner, nameof(owner))""" assert (len(dnWithBinary.BinaryData) >= cls.MinLength) assert (len(dnWithBinary.DistinguishedName) > 0) _Version = None _KeyID = None _KeyHash = None _KeyMaterial = None _KeyUsage = None _KeyLegacyUsage = None _KeySource = None _DeviceId = None _CustomKeyInformation = None _KeyApproximateLastLogonTimeStamp = None _KeyCreationTime = None # Parse binary input stream_data = io.BytesIO(dnWithBinary.BinaryData) _Version = KeyCredentialVersion(struct.unpack(' str: return "Id: %s, Source: %s, Version: %s, Usage: %s, CreationTime: %s" % ( self.Identifier, self.Source, self.Version, self.Usage, self.CreationTime ) def toByteArray(self): # Note that we do not support the legacy V1 format yet. # Serialize properties 3-9 first, as property 2 must contain their hash: binaryData = b"" binaryProperties = b"" # Key Material _data = self.RawKeyMaterial.toRawBytes() binaryProperties += struct.pack(" DNWithBinary: # This method should only be used when the owner is in the form of a Distinguished Name. return DNWithBinary(self.Owner, self.toByteArray()) def verifyHash(self) -> bool: # Key Identifier self.toByteArray() return bool(self.computed_hash == self.KeyHash) def toDict(self) -> dict: keyCredentialDict = { 'Owner': self.Owner, 'Version': self.Version.value, 'Identifier': self.Identifier, 'KeyHash': binascii.hexlify(self.KeyHash).decode('UTF-8'), 'CreationTime': self.CreationTime.toTicks(), 'RawKeyMaterial': self.RawKeyMaterial.toDict(), 'Usage': self.Usage.value, 'LegacyUsage': self.LegacyUsage, 'Source': self.Source.value, 'DeviceId': self.DeviceId.toFormatD(), 'LastLogonTime': self.LastLogonTime.toTicks(), #todo : toTicks doesn't seem to work 'CustomKeyInfo': self.CustomKeyInfo.toDict() } return keyCredentialDict @classmethod def fromDict(cls, data): KeyMaterial = RSAKeyMaterial.fromDict(data["RawKeyMaterial"]) keyCredential = cls(publicKey=KeyMaterial, deviceId=Guid.fromFormatD(data["DeviceId"]), owner=data["Owner"], currentTime=DateTime(data["CreationTime"])) keyCredential.Version = KeyCredentialVersion(data["Version"]) keyCredential.Identifier = data["Identifier"] keyCredential.KeyHash = binascii.unhexlify(data["KeyHash"]) keyCredential.Usage = KeyUsage(data["Usage"]) keyCredential.LegacyUsage = data["LegacyUsage"] keyCredential.Source = KeySource(data["Source"]) keyCredential.CustomKeyInfo = CustomKeyInformation.fromDict(data["CustomKeyInfo"]) keyCredential.LastLogonTime = DateTime(data["LastLogonTime"]) return keyCredential def show(self): print("" % hex(id(self))) print(" | \x1b[93mOwner\x1b[0m:", self.Owner) print(" | \x1b[93mVersion\x1b[0m:", hex(self.Version.value)) print(" | \x1b[93mKeyID\x1b[0m:", self.Identifier) """ if self.verifyHash() == True: print(" | \x1b[93mKeyHash\x1b[0m: %s (verified=\x1b[92mTrue\x1b[0m)" % binascii.hexlify(self.KeyHash).decode('UTF-8')) else: print(" | \x1b[93mKeyHash\x1b[0m: %s (verified=\x1b[91mFalse\x1b[0m)" % binascii.hexlify(self.KeyHash).decode('UTF-8')) """ print(" | \x1b[93mKeyHash\x1b[0m: %s" % binascii.hexlify(self.KeyHash).decode('UTF-8')) print(" | \x1b[93mRawKeyMaterial\x1b[0m:", self.RawKeyMaterial) print(" | | \x1b[93mExponent (E)\x1b[0m: %d" % self.RawKeyMaterial.exponent) print(" | | \x1b[93mModulus (N)\x1b[0m: %s" % hex(self.RawKeyMaterial.modulus)) print(" | | \x1b[93mPrime1 (P)\x1b[0m: %s" % hex(self.RawKeyMaterial.prime1)) print(" | | \x1b[93mPrime2 (Q)\x1b[0m: %s" % hex(self.RawKeyMaterial.prime2)) print(" | \x1b[93mUsage\x1b[0m:", self.Usage) print(" | \x1b[93mLegacyUsage\x1b[0m:", self.LegacyUsage) print(" | \x1b[93mSource\x1b[0m:", self.Source) print(" | \x1b[93mDeviceId\x1b[0m:", self.DeviceId.toFormatD()) print(" | \x1b[93mCustomKeyInfo\x1b[0m:", self.CustomKeyInfo) for key in self.CustomKeyInfo.keys(): print(" | | \x1b[93m%s\x1b[0m:" % key, self.CustomKeyInfo[key]) print(" | \x1b[93mLastLogonTime (UTC)\x1b[0m:", self.LastLogonTime) print(" | \x1b[93mCreationTime (UTC)\x1b[0m:", self.CreationTime) def __bytes__(self): return self.toByteArray() pydsinternals-1.2.5/dsinternals/common/data/hello/KeyCredentialEntryType.py000077500000000000000000000020031513773544400272440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KeyCredentialEntryType.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 from enum import Enum class KeyCredentialEntryType(Enum): """ Key Credential Link Entry Identifier Describes the data stored in the Value field. https://msdn.microsoft.com/en-us/library/mt220499.aspx """ # A SHA256 hash of the Value field of the KeyMaterial entry. KeyID = 0x01 # A SHA256 hash of all entries following this entry. KeyHash = 0x02 # Key material of the credential. KeyMaterial = 0x03 # Key Usage KeyUsage = 0x04 # Key Source KeySource = 0x05 # Device Identifier DeviceId = 0x06 # Custom key information. CustomKeyInformation = 0x07 # The approximate time this key was last used, in FILETIME format. KeyApproximateLastLogonTimeStamp = 0x08 # The approximate time this key was created, in FILETIME format. KeyCreationTime = 0x09 pydsinternals-1.2.5/dsinternals/common/data/hello/KeyCredentialVersion.py000077500000000000000000000006671513773544400267440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KeyCredentialVersion.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 from enum import Enum class KeyCredentialVersion(Enum): """ Key Credential Link Blob Structure Version See: https://msdn.microsoft.com/en-us/library/mt220501.aspx """ Version0 = 0x0 Version1 = 0x00000100 Version2 = 0x00000200 pydsinternals-1.2.5/dsinternals/common/data/hello/KeyFlags.py000077500000000000000000000011431513773544400243460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KeyFlags.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 from enum import Enum class KeyFlags(Enum): """ Custom Key Flags See: https://msdn.microsoft.com/en-us/library/mt220496.aspx """ # No flags specified. NONE = 0 # Reserved for future use. (CUSTOMKEYINFO_FLAGS_ATTESTATION) Attestation = 0x01 # During creation of this key, the requesting client authenticated using # only a single credential. (CUSTOMKEYINFO_FLAGS_MFA_NOT_USED) MFANotUsed = 0x02 pydsinternals-1.2.5/dsinternals/common/data/hello/KeySource.py000077500000000000000000000006251513773544400245560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KeySource.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 from enum import Enum class KeySource(Enum): """ Key Source See: https://msdn.microsoft.com/en-us/library/mt220501.aspx """ # On Premises Key Trust AD = 0x00 # Hybrid Azure AD Key Trust AzureAD = 0x01 pydsinternals-1.2.5/dsinternals/common/data/hello/KeyStrength.py000077500000000000000000000007501513773544400251130ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KeyStrength.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 from enum import Enum class KeyStrength(Enum): """ Specifies the strength of the NGC key. See: https://msdn.microsoft.com/en-us/library/mt220496.aspx """ # Key strength is unknown. Unknown = 0x00 # Key strength is weak. Weak = 0x01 # Key strength is normal. Normal = 0x02 pydsinternals-1.2.5/dsinternals/common/data/hello/KeyUsage.py000077500000000000000000000014551513773544400243640ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KeyUsage.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 from enum import Enum class KeyUsage(Enum): """ Key Usage See: https://msdn.microsoft.com/en-us/library/mt220501.aspx """ # Admin key (pin-reset key) AdminKey = 0 # NGC key attached to a user object (KEY_USAGE_NGC) NGC = 0x01 # Transport key attached to a device object STK = 0x02 # BitLocker recovery key BitlockerRecovery = 0x03 # Unrecognized key usage Other = 0x04 # Fast IDentity Online Key (KEY_USAGE_FIDO) FIDO = 0x07 # File Encryption Key (KEY_USAGE_FEK) FEK = 0x08 # DPAPI Key # TODO: The DPAPI enum needs to be mapped to a proper integer value. pydsinternals-1.2.5/dsinternals/common/data/hello/VolumeType.py000077500000000000000000000010641513773544400247540ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : VolumeType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class VolumeType(Enum): """ VolumeType Specifies the volume type. See: https://msdn.microsoft.com/en-us/library/mt220496.aspx """ # Volume not specified. NONE = 0x00 # Operating system volume (OSV). OperatingSystem = 0x01 # Fixed data volume (FDV). Fixed = 0x02 # Removable data volume (RDV). Removable = 0x03 pydsinternals-1.2.5/dsinternals/common/data/hello/__init__.py000077500000000000000000000002501513773544400243760ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/data/hello/fidoAuthenticatorFlags.py000077500000000000000000000024661513773544400273030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : fidoauthenticatorflags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class AuthenticatorFlags(Enum): """ Authenticator data flags """ # User Present indicates that the user presence test has completed successfully. # UserPresent = 0x1 # Reserved for future use (RFU1) RFU1 = 0x2 # User Verified indicates that the user verification process has completed successfully. # UserVerified = 0x4 # Reserved for future use (RFU2) RFU2 = 0x8 # Reserved for future use (RFU3) RFU3 = 0x10 # Reserved for future use (RFU4) RFU4 = 0x20 # Attested credential data included indicates that the authenticator added attested credential data to the authenticator data. # AttestationData = 0x40 # Extension data included indicates that the authenticator added extension data to the authenticator data. # ExtensionData = 0x80pydsinternals-1.2.5/dsinternals/common/data/hello/fidoCOSE.py000077500000000000000000000062251513773544400242420ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : fidocose.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class COSE(object): """ COSE CBOR Object Signing and Encryption RFC8152 https://tools.ietf.org/html/rfc8152 """ class Algorithm(Enum): """ Algorithm COSE Algorithms https://www.iana.org/assignments/cose/cose.xhtml#algorithms """ # RSASSA-PKCS1-v1_5 w/ SHA-1 RS1 = -65535 # RSASSA-PKCS1-v1_5 w/ SHA-512 RS512 = -259 # RSASSA-PKCS1-v1_5 w/ SHA-384 RS384 = -258 # RSASSA-PKCS1-v1_5 w/ SHA-256 RS256 = -257 # RSASSA-PSS w/ SHA-512 PS512 = -39 # RSASSA-PSS w/ SHA-384 PS384 = -38 # RSASSA-PSS w/ SHA-256 PS256 = -37 # ECDSA w/ SHA-512 ES512 = -36 # ECDSA w/ SHA-384 ES384 = -35 # EdDSA EdDSA = -8 # ECDSA w/ SHA-256 ES256 = -7 class KeyCommonParameter(Enum): """ KeyCommonParameter COSE Key Common Parameters https://www.iana.org/assignments/cose/cose.xhtml#key-common-parameters """ # This value is reserved Reserved = 0 # Identification of the key type KeyType = 1 # Key identification value - match to kid in message KeyId = 2 # Key usage restriction to this algorithm Alg = 3 # Restrict set of permissible operations KeyOps = 4 # Base IV to be XORed with Partial IVs BaseIV = 5 class KeyTypeParameter(Enum): """ KeyTypeParameter COSE Key Type Parameters https://www.iana.org/assignments/cose/cose.xhtml#key-type-parameters """ # EC identifier Crv = -1 # Key Value K = -1 # x-coordinate X = -2 # y-coordinate Y = -3 # the RSA modulus n N = -1 # the RSA public exponent e E = -2 class KeyType(Enum): """ KeyType COSE Key Types https://www.iana.org/assignments/cose/cose.xhtml#key-type """ # This value is reserved Reserved = 0 # Octet Key Pair OKP = 1 # Elliptic Curve Keys w/ x- and y-coordinate pair EC2 = 2 # RSA Key RSA = 3 # Symmetric Keys Symmetric = 4 class EllipticCurve(Enum): """ EllipticCurve COSE Elliptic Curves https://www.iana.org/assignments/cose/cose.xhtml#elliptic-curves """ # This value is reserved Reserved = 0 # NIST P-256 also known as secp256r1 P256 = 1 # NIST P-384 also known as secp384r1 P384 = 2 # NIST P-521 also known as secp521r1 P521 = 3 # X25519 for use w/ ECDH only X25519 = 4 # X448 for use w/ ECDH only X448 = 5 # Ed25519 for use w/ EdDSA only Ed25519 = 6 # Ed448 for use w/ EdDSA only Ed448 = 7 # secp256k1 (pending IANA - requested assignment 8) P256K = 8 pydsinternals-1.2.5/dsinternals/common/data/principals/000077500000000000000000000000001513773544400233265ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/data/principals/KerberosEncryptionType.py000066400000000000000000000017621513773544400303770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KerberosEncryptionType.py # Author : Podalirius (@podalirius_) # Date created : 8 Oct 2021 from enum import Enum class KerberosEncryptionType(Enum): """ KerberosEncryptionType https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 """ # Disabled by default starting from Windows 7 and Windows Server 2008 R2. DES_CBC_CRC = 0x1 # Disabled by default starting from Windows 7 and Windows Server 2008 R2. DES_CBC_MD5 = 0x3 # Supported starting from Windows Server 2008 and Windows Vista. AES128_CTS_HMAC_SHA1_96 = 0x11 # Supported starting from Windows Server 2008 and Windows Vista. AES256_CTS_HMAC_SHA1_96 = 0x12 # Default suite for operating systems before Windows Server 2008 and Windows Vista. RC4_HMAC = 0x17 # Default suite for operating systems before Windows Server 2008 and Windows Vista. RC4_HMAC_EXP = 0x18 pydsinternals-1.2.5/dsinternals/common/data/principals/KerberosKeyType.py000077500000000000000000000016061513773544400267750ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KerberosKeyType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class KerberosKeyType(Enum): """ KerberosKeyType Key types corresponding to various kerberos encryption types, as defined in ntsecapi.h. """ NULL = 0 DES_CBC_CRC = 1 DES_CBC_MD4 = 2 DES_CBC_MD5 = 3 AES128_CTS_HMAC_SHA1_96 = 17 AES256_CTS_HMAC_SHA1_96 = 18 DES_CBC_MD5_NT = 20 RC4_HMAC_NT = 23 RC4_HMAC_NT_EXP = 24 RC4_MD4 = -128 RC4_PLAIN2 = -129 RC4_LM = -130 RC4_SHA = -131 DES_PLAIN = -132 RC4_HMAC_OLD = -133 RC4_PLAIN_OLD = -134 RC4_HMAC_OLD_EXP = -135 RC4_PLAIN_OLD_EXP = -136 RC4_PLAIN = -140 RC4_PLAIN_EXP = -141 AES128_CTS_HMAC_SHA1_96_PLAIN = -148 AES256_CTS_HMAC_SHA1_96_PLAIN = -149 pydsinternals-1.2.5/dsinternals/common/data/principals/KerberosPreAuthenticationType.py000066400000000000000000000036301513773544400316670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KerberosPreAuthenticationType.py # Author : Podalirius (@podalirius_) # Date created : 8 Oct 2021 from enum import Enum class KerberosPreAuthenticationType(Enum): """ KerberosPreAuthenticationType https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 """ # Logon without Pre-Authentication. NO_PA_LOGON = 0 # This is a normal type for standard password authentication. PA_ENC_TIMESTAMP = 2 # The ETYPE-INFO pre-authentication type is sent by the KDC in a KRB-ERROR indicating a requirement for additional pre-authentication. It is usually used to notify a client of which key to use for the encryption of an encrypted timestamp for the purposes of sending a PA-ENC-TIMESTAMP pre-authentication value. Never saw this Pre-Authentication Type in Microsoft Active Directory environment. PA_ETYPE_INFO = 11 # Used for Smart Card logon authentication. PA_PK_AS_REP_OLD = 15 # Request sent to KDC in Smart Card authentication scenarios. PA_PK_AS_REQ = 16 # This type should also be used for Smart Card authentication, but in certain Active Directory environments, it is never seen. PA_PK_AS_REP = 17 # The ETYPE-INFO2 pre-authentication type is sent by the KDC in a KRB-ERROR indicating a requirement for additional pre-authentication. It is usually used to notify a client of which key to use for the encryption of an encrypted timestamp for the purposes of sending a PA-ENC-TIMESTAMP pre-authentication value. Never saw this Pre-Authentication Type in Microsoft Active Directory environment. PA_ETYPE_INFO2 = 19 # Used in KDC Referrals tickets. PA_SVR_REFERRAL_INFO = 20 # Logon using Kerberos Armoring (FAST). Supported starting from Windows Server 2012 domain controllers and Windows 8 clients. PA_ENCRYPTED_CHALLENGE = 138 pydsinternals-1.2.5/dsinternals/common/data/principals/KerberosTicketFlag.py000077500000000000000000000365661513773544400274350ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : KerberosTicketFlag.py # Author : Podalirius (@podalirius_) # Date created : 8 Oct 2021 from enum import Enum class KerberosTicketFlag(Enum): """ KerberosTicketFlag https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 """ # No error No errors were found. KDC_ERR_NONE = 0x0 # Client's entry in KDC database has expired No information. KDC_ERR_NAME_EXP = 0x1 # Server's entry in KDC database has expired No information. KDC_ERR_SERVICE_EXP = 0x2 # Requested Kerberos version number not supported No information. KDC_ERR_BAD_PVNO = 0x3 # Client's key encrypted in old master key No information. KDC_ERR_C_OLD_MAST_KVNO = 0x4 # Server's key encrypted in old master key No information. KDC_ERR_S_OLD_MAST_KVNO = 0x5 # Client not found in Kerberos database The username doesn’t exist. KDC_ERR_C_PRINCIPAL_UNKNOWN = 0x6 # Server not found in Kerberos database This error can occur if the domain controller cannot find the server’s name in Active Directory. This error is similar to KDC_ERR_C_PRINCIPAL_UNKNOWN except that it occurs when the server name cannot be found. KDC_ERR_S_PRINCIPAL_UNKNOWN = 0x7 # Multiple principal entries in KDC database This error occurs if duplicate principal names exist. Unique principal names are crucial for ensuring mutual authentication. Thus, duplicate principal names are strictly forbidden, even across multiple realms. Without unique principal names, the client has no way of ensuring that the server it is communicating with is the correct one. KDC_ERR_PRINCIPAL_NOT_UNIQUE = 0x8 # The client or server has a null key (master key) No master key was found for client or server. Usually it means that administrator should reset the password on the account. KDC_ERR_NULL_KEY = 0x9 # Ticket (TGT) not eligible for postdating This error can occur if a client requests postdating of a Kerberos ticket. Postdating is the act of requesting that a ticket’s start time be set into the future. It also can occur if there is a time difference between the client and the KDC. KDC_ERR_CANNOT_POSTDATE = 0xA # Requested start time is later than end time There is a time difference between the KDC and the client. KDC_ERR_NEVER_VALID = 0xB # Requested start time is later than end time This error is usually the result of logon restrictions in place on a user’s account. For example workstation restriction, smart card authentication requirement or logon time restriction. KDC_ERR_POLICY = 0xC # KDC cannot accommodate requested option Impending expiration of a TGT. The SPN to which the client is attempting to delegate credentials is not in its Allowed-to-delegate-to list KDC_ERR_BADOPTION = 0xD # KDC has no support for encryption type In general, this error occurs when the KDC or a client receives a packet that it cannot decrypt. KDC_ERR_ETYPE_NOTSUPP = 0xE # KDC has no support for checksum type The KDC, server, or client receives a packet for which it does not have a key of the appropriate encryption type. The result is that the computer is unable to decrypt the ticket. KDC_ERR_SUMTYPE_NOSUPP = 0xF # KDC has no support for PADATA type (pre-authentication data) Smart card logon is being attempted and the proper certificate cannot be located. This can happen because the wrong certification authority (CA) is being queried or the proper CA cannot be contacted. It can also happen when a domain controller doesn’t have a certificate installed for smart cards (Domain Controller or Domain Controller Authentication templates). This error code cannot occur in event “4768. A Kerberos authentication ticket (TGT) was requested�. It occurs in “4771. Kerberos pre-authentication failed� event. KDC_ERR_PADATA_TYPE_NOSUPP = 0x10 # KDC has no support for transited type No information. KDC_ERR_TRTYPE_NO_SUPP = 0x11 # Client’s credentials have been revoked This might be because of an explicit disabling or because of other restrictions in place on the account. For example: account disabled, expired, or locked out. KDC_ERR_CLIENT_REVOKED = 0x12 # Credentials for server have been revoked No information. KDC_ERR_SERVICE_REVOKED = 0x13 # TGT has been revoked Since the remote KDC may change its PKCROSS key while there are PKCROSS tickets still active, it SHOULD cache the old PKCROSS keys until the last issued PKCROSS ticket expires. Otherwise, the remote KDC will respond to a client with a KRB-ERROR message of type KDC_ERR_TGT_REVOKED. See RFC1510 for more details. KDC_ERR_TGT_REVOKED = 0x14 # Client not yet valid—try again later No information. KDC_ERR_CLIENT_NOTYET = 0x15 # Server not yet valid—try again later No information. KDC_ERR_SERVICE_NOTYET = 0x16 # Password has expired—change password to reset The user’s password has expired. This error code cannot occur in event “4768. A Kerberos authentication ticket (TGT) was requested�. It occurs in “4771. Kerberos pre-authentication failed� event. KDC_ERR_KEY_EXPIRED = 0x17 # Pre-authentication information was invalid The wrong password was provided. This error code cannot occur in event “4768. A Kerberos authentication ticket (TGT) was requested�. It occurs in “4771. Kerberos pre-authentication failed� event. KDC_ERR_PREAUTH_FAILED = 0x18 # Additional pre-authentication required This error often occurs in UNIX interoperability scenarios. MIT-Kerberos clients do not request pre-authentication when they send a KRB_AS_REQ message. If pre-authentication is required (the default), Windows systems will send this error. Most MIT-Kerberos clients will respond to this error by giving the pre-authentication, in which case the error can be ignored, but some clients might not respond in this way. KDC_ERR_PREAUTH_REQUIRED = 0x19 # KDC does not know about the requested server No information. KDC_ERR_SERVER_NOMATCH = 0x1A # KDC is unavailable No information. KDC_ERR_SVC_UNAVAILABLE = 0x1D # Integrity check on decrypted field failed The authenticator was encrypted with something other than the session key. The result is that the client cannot decrypt the resulting message. The modification of the message could be the result of an attack or it could be because of network noise. KRB_AP_ERR_BAD_INTEGRITY = 0x1F # The ticket has expired The smaller the value for the “Maximum lifetime for user ticket� Kerberos policy setting, the more likely it is that this error will occur. Because ticket renewal is automatic, you should not have to do anything if you get this message. KRB_AP_ERR_TKT_EXPIRED = 0x20 # The ticket is not yet valid The ticket presented to the server is not yet valid (in relationship to the server time). The most probable cause is that the clocks on the KDC and the client are not synchronized. If cross-realm Kerberos authentication is being attempted, then you should verify time synchronization between the KDC in the target realm and the KDC in the client realm, as well. KRB_AP_ERR_TKT_NYV = 0x21 # The request is a replay This error indicates that a specific authenticator showed up twice — the KDC has detected that this session ticket duplicates one that it has already received. KRB_AP_ERR_REPEAT = 0x22 # The ticket is not for us The server has received a ticket that was meant for a different realm. KRB_AP_ERR_NOT_US = 0x23 # The ticket and authenticator do not match The KRB_TGS_REQ is being sent to the wrong KDC. There is an account mismatch during protocol transition. KRB_AP_ERR_BADMATCH = 0x24 # The clock skew is too great This error is logged if a client computer sends a timestamp whose value differs from that of the server’s timestamp by more than the number of minutes found in the “Maximum tolerance for computer clock synchronization� setting in Kerberos policy. KRB_AP_ERR_SKEW = 0x25 # Network address in network layer header doesn't match address inside ticket Session tickets MAY include the addresses from which they are valid. This error can occur if the address of the computer sending the ticket is different from the valid address in the ticket. A possible cause of this could be an Internet Protocol (IP) address change. Another possible cause is when a ticket is passed through a proxy server or NAT. The client is unaware of the address scheme used by the proxy server, so unless the program caused the client to request a proxy server ticket with the proxy server's source address, the ticket could be invalid. KRB_AP_ERR_BADADDR = 0x26 # Protocol version numbers don't match (PVNO) When an application receives a KRB_SAFE message, it verifies it. If any error occurs, an error code is reported for use by the application. The message is first checked by verifying that the protocol version and type fields match the current version and KRB_SAFE, respectively. A mismatch generates a KRB_AP_ERR_BADVERSION. See RFC4120 for more details. KRB_AP_ERR_BADVERSION = 0x27 # Message type is unsupported This message is generated when target server finds that message format is wrong. This applies to KRB_AP_REQ, KRB_SAFE, KRB_PRIV and KRB_CRED messages. This error also generated if use of UDP protocol is being attempted with User-to-User authentication. KRB_AP_ERR_MSG_TYPE = 0x28 # Message stream modified and checksum didn't match The authentication data was encrypted with the wrong key for the intended server. The authentication data was modified in transit by a hardware or software error, or by an attacker. The client sent the authentication data to the wrong server because incorrect DNS data caused the client to send the request to the wrong server. The client sent the authentication data to the wrong server because DNS data was out-of-date on the client. KRB_AP_ERR_MODIFIED = 0x29 # Message out of order (possible tampering) This event generates for KRB_SAFE and KRB_PRIV messages if an incorrect sequence number is included, or if a sequence number is expected but not present. See RFC4120 for more details. KRB_AP_ERR_BADORDER = 0x2A # Specified version of key is not available This error might be generated on server side during receipt of invalid KRB_AP_REQ message. If the key version indicated by the Ticket in the KRB_AP_REQ is not one the server can use (e.g., it indicates an old key, and the server no longer possesses a copy of the old key), the KRB_AP_ERR_BADKEYVER error is returned. KRB_AP_ERR_BADKEYVER = 0x2C # Service key not available This error might be generated on server side during receipt of invalid KRB_AP_REQ message. Because it is possible for the server to be registered in multiple realms, with different keys in each, the realm field in the unencrypted portion of the ticket in the KRB_AP_REQ is used to specify which secret key the server should use to decrypt that ticket. The KRB_AP_ERR_NOKEY error code is returned if the server doesn't have the proper key to decipher the ticket. KRB_AP_ERR_NOKEY = 0x2D # Mutual authentication failed No information. KRB_AP_ERR_MUT_FAIL = 0x2E # Incorrect message direction No information. KRB_AP_ERR_BADDIRECTION = 0x2F # Alternative authentication method required According RFC4120 this error message is obsolete. KRB_AP_ERR_METHOD = 0x30 # Incorrect sequence number in message No information. KRB_AP_ERR_BADSEQ = 0x31 # Inappropriate type of checksum in message (checksum may be unsupported) When KDC receives KRB_TGS_REQ message it decrypts it, and after that, the user-supplied checksum in the Authenticator MUST be verified against the contents of the request. The message MUST be rejected either if the checksums do not match (with an error code of KRB_AP_ERR_MODIFIED) or if the checksum is not collision-proof (with an error code of KRB_AP_ERR_INAPP_CKSUM). KRB_AP_ERR_INAPP_CKSUM = 0x32 # Desired path is unreachable No information. KRB_AP_PATH_NOT_ACCEPTED = 0x33 # Too much data The size of a ticket is too large to be transmitted reliably via UDP. In a Windows environment, this message is purely informational. A computer running a Windows operating system will automatically try TCP if UDP fails. KRB_ERR_RESPONSE_TOO_BIG = 0x34 # Generic error Group membership has overloaded the PAC. Multiple recent password changes have not propagated. Crypto subsystem error caused by running out of memory. SPN too long. SPN has too many parts. KRB_ERR_GENERIC = 0x3C # Field is too long for this implementation Each request (KRB_KDC_REQ) and response (KRB_KDC_REP or KRB_ERROR) sent over the TCP stream is preceded by the length of the request as 4 octets in network byte order. The high bit of the length is reserved for future expansion and MUST currently be set to zero. If a KDC that does not understand how to interpret a set high bit of the length encoding receives a request with the high order bit of the length set, it MUST return a KRB-ERROR message with the error KRB_ERR_FIELD_TOOLONG and MUST close the TCP stream. KRB_ERR_FIELD_TOOLONG = 0x3D # The client trust failed or is not implemented This typically happens when user’s smart-card certificate is revoked or the root Certification Authority that issued the smart card certificate (in a chain) is not trusted by the domain controller. KDC_ERR_CLIENT_NOT_TRUSTED = 0x3E # The KDC server trust failed or could not be verified The trustedCertifiers field contains a list of certification authorities trusted by the client, in the case that the client does not possess the KDC's public key certificate. If the KDC has no certificate signed by any of the trustedCertifiers, then it returns an error of type KDC_ERR_KDC_NOT_TRUSTED. See RFC1510 for more details. KDC_ERR_KDC_NOT_TRUSTED = 0x3F # The signature is invalid This error is related to PKINIT. If a PKI trust relationship exists, the KDC then verifies the client's signature on AuthPack (TGT request signature). If that fails, the KDC returns an error message of type KDC_ERR_INVALID_SIG. KDC_ERR_INVALID_SIG = 0x40 # A higher encryption level is needed If the clientPublicValue field is filled in, indicating that the client wishes to use Diffie-Hellman key agreement, then the KDC checks to see that the parameters satisfy its policy. If they do not (e.g., the prime size is insufficient for the expected encryption type), then the KDC sends back an error message of type KDC_ERR_KEY_TOO_WEAK. KDC_ERR_KEY_TOO_WEAK = 0x41 # User-to-user authorization is required In the case that the client application doesn't know that a service requires user-to-user authentication, and requests and receives a conventional KRB_AP_REP, the client will send the KRB_AP_REP request, and the server will respond with a KRB_ERROR token as described in RFC1964, with a msg-type of KRB_AP_ERR_USER_TO_USER_REQUIRED. KRB_AP_ERR_USER_TO_USER_REQUIRED = 0x42 # No TGT was presented or available In user-to-user authentication if the service does not possess a ticket granting ticket, it should return the error KRB_AP_ERR_NO_TGT. KRB_AP_ERR_NO_TGT = 0x43 # Incorrect domain or principal Although this error rarely occurs, it occurs when a client presents a cross-realm TGT to a realm other than the one specified in the TGT. Typically, this results from incorrectly configured DNS. KDC_ERR_WRONG_REALM = 0x44 pydsinternals-1.2.5/dsinternals/common/data/principals/SamAccountType.py000077500000000000000000000023761513773544400266120ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SamAccountType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamAccountType(Enum): """ Account type values are associated with accounts and indicate the type of account. https://msdn.microsoft.com/en-us/library/cc245527.aspx """ # Represents a domain object. Domain = 0x0 # Represents a group object. SecurityGroup = 0x10000000 # Represents a group object that is not used for authorization context generation. DistributuionGroup = 0x10000001 # Represents an alias object or a domain local group object. Alias = 0x20000000 # Represents an alias object that is not used for authorization context generation. NonSecurityAlias = 0x20000001 # Represents a user object. User = 0x30000000 # Represents a computer object. Computer = 0x30000001 # Represents a user object that is used for domain trusts. Trust = 0x30000002 # Represents an application-defined group. ApplicationBasicGroup = 0x40000000 # Represents an application-defined group whose members are determined by the results of a query. ApplicationQueryGroup = 0x40000001 pydsinternals-1.2.5/dsinternals/common/data/principals/UserAccountControl.py000077500000000000000000000060761513773544400275100ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : UserAccountControl.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class UserAccountControl(Enum): """ UserAccountControl Flags that control the behavior of the user account. """ # The logon script is executed. Script = 0x00000001 # The user account is disabled. Disabled = 0x00000002 # The home directory is required. HomeDirRequired = 0x00000008 # The account is currently locked out. LockedOut = 0x00000010 # No password is required. PasswordNotRequired = 0x00000020 # The user cannot change the password. PasswordCantChange = 0x00000040 # The user can send an encrypted password. PlaintextPasswordAllowed = 0x00000080 # This is an account for users whose primary account is in another domain. This account provides user access # to this domain, but not to any domain that trusts this domain. Also known as a local user account. TempDuplicateAccount = 0x00000100 # This is a default account type that represents a typical user. NormalAccount = 0x00000200 # This is a permit to trust account for a system domain that trusts other domains. TrustAccount = 0x00000800 # This is a computer account for a computer that is a member of this domain. WorkstationAccount = 0x00001000 # This is a computer account for a system backup domain controller that is a member of this domain. ServerAccount = 0x00002000 # The password for this account will never expire. PasswordNeverExpires = 0x00010000 # This is an Majority Node Set (MNS) logon account. With MNS, you can configure a multi-node Windows cluster # without using a common shared disk. MNSAccount = 0x00020000 # The user must log on using a smart card. SmartCardRequired = 0x00040000 # The service account (user or computer account), under which a service runs, is trusted for Kerberos delegation. # Any such service can impersonate a client requesting the service. TrustedForDelegation = 0x00080000 # The security context of the user will not be delegated to a service even if the service account is set as trusted # for Kerberos delegation. NotDelegated = 0x00100000 # Restrict this principal to use only Data Encryption Standard (DES) encryption types for keys. UseDesKeyOnly = 0x00200000 # This account does not require Kerberos pre-authentication for logon. PreAuthNotRequired = 0x00400000 # The user password has expired. This flag is created by the system using data from the Pwd-Last-Set attribute # and the domain policy. PasswordExpired = 0x00800000 # The account is enabled for delegation. This is a security-sensitive setting; accounts with this option enabled # should be strictly controlled. This setting enables a service running under the account to assume a client identity # and authenticate as that user to other remote servers on the network. TrustedToAuthenticateForDelegation = 0x01000000 pydsinternals-1.2.5/dsinternals/common/data/principals/__init__.py000077500000000000000000000002501513773544400254370ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/data/schema/000077500000000000000000000000001513773544400224225ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/data/schema/AttributeSyntax.py000077500000000000000000000033051513773544400261520ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : AttributeSyntax.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class AttributeSyntax(Enum): """ AttributeSyntax Specifies the data representation (syntax) type of an Attribute object. """ # Not a legal syntax. Undefined = 0x80000 # A distinguished name of a directory service object. DN = Undefined + 1 # An OID value type. Oid = Undefined + 2 # A case-sensitive string type. CaseExactString = Undefined + 3 # A case-insensitive string type. CaseIgnoreString = Undefined + 4 # Printable character set string or IA5 character set string. String = Undefined + 5 # A numeric value represented as a string. NumericString = Undefined + 6 # An ADS_DN_WITH_BINARY structure used for mapping a distinguished name to a non-varying GUID. DNWithBinary = Undefined + 7 # A Boolean value type. Bool = Undefined + 8 # A 32-bit number or enumeration. Int = Undefined + 9 # A byte array represented as a string OctetString = Undefined + 10 # UTC Time or Generalized-Time. Time = Undefined + 11 # Unicode string. UnicodeString = Undefined + 12 # A Presentation-Address object type. PresentationAddress = Undefined + 13 # An ADS_DN_WITH_STRING structure used for mapping a distinguished name to a non-varying string value. DNWithString = Undefined + 14 # A security descriptor value type. SecurityDescriptor = Undefined + 15 # A 64 bit (large) integer value type. Int64 = Undefined + 16 # An SID value type. Sid = Undefined + 17 pydsinternals-1.2.5/dsinternals/common/data/schema/__init__.py000077500000000000000000000002501513773544400245330ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/exceptions/000077500000000000000000000000001513773544400224325ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/exceptions/__init__.py000077500000000000000000000002501513773544400245430ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/extensions/000077500000000000000000000000001513773544400224505ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/extensions/__init__.py000077500000000000000000000002501513773544400245610ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/interop/000077500000000000000000000000001513773544400217315ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/interop/__init__.py000077500000000000000000000002501513773544400240420ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/interop/enums/000077500000000000000000000000001513773544400230605ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/interop/enums/NetCancelOptions.py000077500000000000000000000011411513773544400266420ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : NetCancelOptions.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class NetCancelOptions(Enum): """ NetCancelOptions A set of connection options. See: https://msdn.microsoft.com/library/windows/desktop/aa385413.aspx """ # The system does not update information about the connection. NoUpdate = 0 # The system updates the user profile with the information that the connection is no longer a persistent one. UpdateProfile = 0x00000001 pydsinternals-1.2.5/dsinternals/common/interop/enums/NetConnectOptions.py000077500000000000000000000034461513773544400270600ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : NetConnectOptions.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class NetConnectOptions(Enum): """ NetConnectOptions A set of connection options. See: https://msdn.microsoft.com/library/windows/desktop/aa385413.aspx """ # The network resource connection should be remembered. UpdateProfile = 0x00000001 # The network resource connection should not be put in the recent connection list. UpdateRecent = 0x00000002 # The network resource connection should not be remembered. Temporary = 0x00000004 # If this flag is set, the operating system may interact with the user for authentication purposes. Interactive = 0x00000008 # This flag instructs the system not to use any default settings for user names or passwords without offering the user the opportunity to supply an alternative. Prompt = 0x00000010 # This flag forces the redirection of a local device when making the connection. Redirect = 0x00000080 # If this flag is set, then the operating system does not start to use a new media to try to establish the connection (initiate a new dial up connection, for example). CurrentMedia = 0x00000200 # ///If this flag is set, the operating system prompts the user for authentication using the command line instead of a graphical user interface (GUI). CommandLine = 0x00000800 # If this flag is set, and the operating system prompts for a credential, the credential should be saved by the credential manager. CmdSaveCred = 0x00001000 # If this flag is set, and the operating system prompts for a credential, the credential is reset by the credential manager. CredReset = 0x00002000 pydsinternals-1.2.5/dsinternals/common/interop/enums/NetResourceDisplayType.py000077500000000000000000000032411513773544400300630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : NetResourceDisplayType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class NetResourceDisplayType(Enum): """ NetResourceDisplayType The display options for the network object in a network browsing user interface. See: https://msdn.microsoft.com/library/windows/desktop/aa385353.aspx """ # The method used to display the object does not matter. Generic = 0x00000000 # The object should be displayed as a domain. Domain = 0x00000001 # The object should be displayed as a server. Server = 0x00000002 # The object should be displayed as a share. Share = 0x00000003 # The object should be displayed as a file. File = 0x00000004 # The object should be displayed as a group. Group = 0x00000005 # The object should be displayed as a network. Network = 0x00000006 # The object should be displayed as a logical root for the entire network. Root = 0x00000007 # The object should be displayed as a administrative share. ShareAdmin = 0x00000008 # The object should be displayed as a directory. Directory = 0x00000009 # The object should be displayed as a tree. This display type was used for a NetWare Directory Service (NDS) # tree by the NetWare Workstation service supported on Windows XP and earlier. Tree = 0x0000000A # The object should be displayed as a Netware Directory Service container. This display type was used by # the NetWare Workstation service supported on Windows XP and earlier. NDSContainer = 0x0000000B pydsinternals-1.2.5/dsinternals/common/interop/enums/NetResourceScope.py000077500000000000000000000013771513773544400266750ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : NetResourceScope.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class NetResourceScope(Enum): """ NetResourceScope The scope of the enumeration. https://msdn.microsoft.com/library/windows/desktop/aa385353.aspx """ # Enumerate currently connected resources. The dwUsage member cannot be specified. Connected = 0x00000001 # Enumerate all resources on the network. The dwUsage member is specified. Globalnet = 0x00000002 # Enumerate remembered (persistent) connections. The dwUsage member cannot be specified. Remembered = 0x00000003 Recent = 0x00000004 Context = 0x00000005 pydsinternals-1.2.5/dsinternals/common/interop/enums/NetResourceType.py000077500000000000000000000010511513773544400265320ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : NetResourceType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class NetResourceType(Enum): """ NetResourceType The type of resource. See: https://msdn.microsoft.com/library/windows/desktop/aa385353.aspx """ # All resources. Any = 0x00000000 # Disk resources. Disk = 0x00000001 # Print resources. Print = 0x00000002 Reserved = 0x00000008 Unknown = 0xFFFFFFFFpydsinternals-1.2.5/dsinternals/common/interop/enums/NetResourceUsage.py000077500000000000000000000015341513773544400266630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : NetResourceUsage.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class NetResourceUsage(Enum): """ NetResourceUsage A set of bit flags describing how the resource can be used. See: https://msdn.microsoft.com/library/windows/desktop/aa385353.aspx """ # The resource is a connectable resource. Connectable = 0x00000001 # The resource is a container resource. Container = 0x00000002 # The resource is not a local device. NoLocalDevice = 0x00000004 # The resource is a sibling. This value is not used by Windows. Sibling = 0x00000008 # The resource must be attached. Attached = 0x00000010 All = Connectable | Container | Attached Reserved = 0x80000000 pydsinternals-1.2.5/dsinternals/common/interop/enums/NtStatus.py000077500000000000000000000312311513773544400252220ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : NtStatus.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class NtStatus(Enum): """ NtStatus A NT status value. See: https://msdn.microsoft.com/en-us/library/cc704588.aspx """ # region Success # The operation completed successfully. Success = 0x00000000 # The caller specified WaitAny for WaitType and one of the dispatcher objects in the Object array has been set to the signaled state. Wait0 = 0x00000000 Wait1 = 0x00000001 Wait2 = 0x00000002 Wait3 = 0x00000003 Wait63 = 0x0000003f Abandoned = 0x00000080 AbandonedWait0 = 0x00000080 AbandonedWait1 = 0x00000081 AbandonedWait2 = 0x00000082 AbandonedWait3 = 0x00000083 AbandonedWait63 = 0x000000bf UserApc = 0x000000c0 KernelApc = 0x00000100 Alerted = 0x00000101 Timeout = 0x00000102 Pending = 0x00000103 Reparse = 0x00000104 MoreEntries = 0x00000105 NotAllAssigned = 0x00000106 SomeNotMapped = 0x00000107 OpLockBreakInProgress = 0x00000108 VolumeMounted = 0x00000109 RxActCommitted = 0x0000010a NotifyCleanup = 0x0000010b NotifyEnumDir = 0x0000010c NoQuotasForAccount = 0x0000010d PrimaryTransportConnectFailed = 0x0000010e PageFaultTransition = 0x00000110 PageFaultDemandZero = 0x00000111 PageFaultCopyOnWrite = 0x00000112 PageFaultGuardPage = 0x00000113 PageFaultPagingFile = 0x00000114 CrashDump = 0x00000116 ReparseObject = 0x00000118 NothingToTerminate = 0x00000122 ProcessNotInJob = 0x00000123 ProcessInJob = 0x00000124 # The current process is a cloned process. ProcessCloned = 0x00000129 # The file was locked and all users of the file can only read. FileLockedWithOnlyReaders = 0x0000012a # The file was locked and at least one user of the file can write. FileLockedWithWriters = 0x0000012b # endregion Success # region Informational Informational = 0x40000000 ObjectNameExists = 0x40000000 ThreadWasSuspended = 0x40000001 WorkingSetLimitRange = 0x40000002 ImageNotAtBase = 0x40000003 RegistryRecovered = 0x40000009 # endregion Informational # region Warning Warning = 0x80000000 GuardPageViolation = 0x80000001 DatatypeMisalignment = 0x80000002 Breakpoint = 0x80000003 SingleStep = 0x80000004 BufferOverflow = 0x80000005 NoMoreFiles = 0x80000006 HandlesClosed = 0x8000000a PartialCopy = 0x8000000d DeviceBusy = 0x80000011 InvalidEaName = 0x80000013 EaListInconsistent = 0x80000014 NoMoreEntries = 0x8000001a LongJump = 0x80000026 DllMightBeInsecure = 0x8000002b # endregion Warning # region Error Error = 0xc0000000 Unsuccessful = 0xc0000001 NotImplemented = 0xc0000002 InvalidInfoClass = 0xc0000003 InfoLengthMismatch = 0xc0000004 AccessViolation = 0xc0000005 InPageError = 0xc0000006 PagefileQuota = 0xc0000007 InvalidHandle = 0xc0000008 BadInitialStack = 0xc0000009 BadInitialPc = 0xc000000a InvalidCid = 0xc000000b TimerNotCanceled = 0xc000000c InvalidParameter = 0xc000000d NoSuchDevice = 0xc000000e NoSuchFile = 0xc000000f InvalidDeviceRequest = 0xc0000010 EndOfFile = 0xc0000011 WrongVolume = 0xc0000012 NoMediaInDevice = 0xc0000013 NoMemory = 0xc0000017 NotMappedView = 0xc0000019 UnableToFreeVm = 0xc000001a UnableToDeleteSection = 0xc000001b IllegalInstruction = 0xc000001d AlreadyCommitted = 0xc0000021 # A process has requested access to an object but has not been granted those access rights. AccessDenied = 0xc0000022 BufferTooSmall = 0xc0000023 ObjectTypeMismatch = 0xc0000024 NonContinuableException = 0xc0000025 BadStack = 0xc0000028 NotLocked = 0xc000002a NotCommitted = 0xc000002d InvalidParameterMix = 0xc0000030 ObjectNameInvalid = 0xc0000033 ObjectNameNotFound = 0xc0000034 ObjectNameCollision = 0xc0000035 ObjectPathInvalid = 0xc0000039 ObjectPathNotFound = 0xc000003a ObjectPathSyntaxBad = 0xc000003b DataOverrun = 0xc000003c DataLate = 0xc000003d DataError = 0xc000003e CrcError = 0xc000003f SectionTooBig = 0xc0000040 PortConnectionRefused = 0xc0000041 InvalidPortHandle = 0xc0000042 SharingViolation = 0xc0000043 QuotaExceeded = 0xc0000044 InvalidPageProtection = 0xc0000045 MutantNotOwned = 0xc0000046 SemaphoreLimitExceeded = 0xc0000047 PortAlreadySet = 0xc0000048 SectionNotImage = 0xc0000049 SuspendCountExceeded = 0xc000004a ThreadIsTerminating = 0xc000004b BadWorkingSetLimit = 0xc000004c IncompatibleFileMap = 0xc000004d SectionProtection = 0xc000004e EasNotSupported = 0xc000004f EaTooLarge = 0xc0000050 NonExistentEaEntry = 0xc0000051 NoEasOnFile = 0xc0000052 EaCorruptError = 0xc0000053 FileLockConflict = 0xc0000054 LockNotGranted = 0xc0000055 DeletePending = 0xc0000056 CtlFileNotSupported = 0xc0000057 UnknownRevision = 0xc0000058 RevisionMismatch = 0xc0000059 InvalidOwner = 0xc000005a InvalidPrimaryGroup = 0xc000005b NoImpersonationToken = 0xc000005c CantDisableMandatory = 0xc000005d NoLogonServers = 0xc000005e NoSuchLogonSession = 0xc000005f NoSuchPrivilege = 0xc0000060 PrivilegeNotHeld = 0xc0000061 InvalidAccountName = 0xc0000062 UserExists = 0xc0000063 NoSuchUser = 0xc0000064 GroupExists = 0xc0000065 NoSuchGroup = 0xc0000066 MemberInGroup = 0xc0000067 MemberNotInGroup = 0xc0000068 LastAdmin = 0xc0000069 WrongPassword = 0xc000006a IllFormedPassword = 0xc000006b PasswordRestriction = 0xc000006c LogonFailure = 0xc000006d AccountRestriction = 0xc000006e InvalidLogonHours = 0xc000006f InvalidWorkstation = 0xc0000070 PasswordExpired = 0xc0000071 AccountDisabled = 0xc0000072 NoneMapped = 0xc0000073 TooManyLuidsRequested = 0xc0000074 LuidsExhausted = 0xc0000075 InvalidSubAuthority = 0xc0000076 InvalidAcl = 0xc0000077 InvalidSid = 0xc0000078 InvalidSecurityDescr = 0xc0000079 ProcedureNotFound = 0xc000007a InvalidImageFormat = 0xc000007b NoToken = 0xc000007c BadInheritanceAcl = 0xc000007d RangeNotLocked = 0xc000007e DiskFull = 0xc000007f ServerDisabled = 0xc0000080 ServerNotDisabled = 0xc0000081 TooManyGuidsRequested = 0xc0000082 GuidsExhausted = 0xc0000083 InvalidIdAuthority = 0xc0000084 AgentsExhausted = 0xc0000085 InvalidVolumeLabel = 0xc0000086 SectionNotExtended = 0xc0000087 NotMappedData = 0xc0000088 ResourceDataNotFound = 0xc0000089 ResourceTypeNotFound = 0xc000008a ResourceNameNotFound = 0xc000008b ArrayBoundsExceeded = 0xc000008c FloatDenormalOperand = 0xc000008d FloatDivideByZero = 0xc000008e FloatInexactResult = 0xc000008f FloatInvalidOperation = 0xc0000090 FloatOverflow = 0xc0000091 FloatStackCheck = 0xc0000092 FloatUnderflow = 0xc0000093 IntegerDivideByZero = 0xc0000094 IntegerOverflow = 0xc0000095 PrivilegedInstruction = 0xc0000096 TooManyPagingFiles = 0xc0000097 FileInvalid = 0xc0000098 InstanceNotAvailable = 0xc00000ab PipeNotAvailable = 0xc00000ac InvalidPipeState = 0xc00000ad PipeBusy = 0xc00000ae IllegalFunction = 0xc00000af PipeDisconnected = 0xc00000b0 PipeClosing = 0xc00000b1 PipeConnected = 0xc00000b2 PipeListening = 0xc00000b3 InvalidReadMode = 0xc00000b4 IoTimeout = 0xc00000b5 FileForcedClosed = 0xc00000b6 ProfilingNotStarted = 0xc00000b7 ProfilingNotStopped = 0xc00000b8 NotSameDevice = 0xc00000d4 FileRenamed = 0xc00000d5 CantWait = 0xc00000d8 PipeEmpty = 0xc00000d9 CantTerminateSelf = 0xc00000db InternalError = 0xc00000e5 InvalidParameter1 = 0xc00000ef InvalidParameter2 = 0xc00000f0 InvalidParameter3 = 0xc00000f1 InvalidParameter4 = 0xc00000f2 InvalidParameter5 = 0xc00000f3 InvalidParameter6 = 0xc00000f4 InvalidParameter7 = 0xc00000f5 InvalidParameter8 = 0xc00000f6 InvalidParameter9 = 0xc00000f7 InvalidParameter10 = 0xc00000f8 InvalidParameter11 = 0xc00000f9 InvalidParameter12 = 0xc00000fa MappedFileSizeZero = 0xc000011e TooManyOpenedFiles = 0xc000011f Cancelled = 0xc0000120 CannotDelete = 0xc0000121 InvalidComputerName = 0xc0000122 FileDeleted = 0xc0000123 SpecialAccount = 0xc0000124 SpecialGroup = 0xc0000125 SpecialUser = 0xc0000126 MembersPrimaryGroup = 0xc0000127 FileClosed = 0xc0000128 TooManyThreads = 0xc0000129 ThreadNotInProcess = 0xc000012a TokenAlreadyInUse = 0xc000012b PagefileQuotaExceeded = 0xc000012c CommitmentLimit = 0xc000012d InvalidImageLeFormat = 0xc000012e InvalidImageNotMz = 0xc000012f InvalidImageProtect = 0xc0000130 InvalidImageWin16 = 0xc0000131 LogonServer = 0xc0000132 DifferenceAtDc = 0xc0000133 SynchronizationRequired = 0xc0000134 DllNotFound = 0xc0000135 IoPrivilegeFailed = 0xc0000137 OrdinalNotFound = 0xc0000138 EntryPointNotFound = 0xc0000139 ControlCExit = 0xc000013a PortNotSet = 0xc0000353 DebuggerInactive = 0xc0000354 CallbackBypass = 0xc0000503 PortClosed = 0xc0000700 MessageLost = 0xc0000701 InvalidMessage = 0xc0000702 RequestCanceled = 0xc0000703 RecursiveDispatch = 0xc0000704 LpcReceiveBufferExpected = 0xc0000705 LpcInvalidConnectionUsage = 0xc0000706 LpcRequestsNotAllowed = 0xc0000707 ResourceInUse = 0xc0000708 ProcessIsProtected = 0xc0000712 VolumeDirty = 0xc0000806 FileCheckedOut = 0xc0000901 CheckOutRequired = 0xc0000902 BadFileType = 0xc0000903 FileTooLarge = 0xc0000904 FormsAuthRequired = 0xc0000905 VirusInfected = 0xc0000906 VirusDeleted = 0xc0000907 TransactionalConflict = 0xc0190001 InvalidTransaction = 0xc0190002 TransactionNotActive = 0xc0190003 TmInitializationFailed = 0xc0190004 RmNotActive = 0xc0190005 RmMetadataCorrupt = 0xc0190006 TransactionNotJoined = 0xc0190007 DirectoryNotRm = 0xc0190008 CouldNotResizeLog = 0xc0190009 TransactionsUnsupportedRemote = 0xc019000a LogResizeInvalidSize = 0xc019000b RemoteFileVersionMismatch = 0xc019000c CrmProtocolAlreadyExists = 0xc019000f TransactionPropagationFailed = 0xc0190010 CrmProtocolNotFound = 0xc0190011 TransactionSuperiorExists = 0xc0190012 TransactionRequestNotValid = 0xc0190013 TransactionNotRequested = 0xc0190014 TransactionAlreadyAborted = 0xc0190015 TransactionAlreadyCommitted = 0xc0190016 TransactionInvalidMarshallBuffer = 0xc0190017 CurrentTransactionNotValid = 0xc0190018 LogGrowthFailed = 0xc0190019 ObjectNoLongerExists = 0xc0190021 StreamMiniversionNotFound = 0xc0190022 StreamMiniversionNotValid = 0xc0190023 MiniversionInaccessibleFromSpecifiedTransaction = 0xc0190024 CantOpenMiniversionWithModifyIntent = 0xc0190025 CantCreateMoreStreamMiniversions = 0xc0190026 HandleNoLongerValid = 0xc0190028 NoTxfMetadata = 0xc0190029 LogCorruptionDetected = 0xc0190030 CantRecoverWithHandleOpen = 0xc0190031 RmDisconnected = 0xc0190032 EnlistmentNotSuperior = 0xc0190033 RecoveryNotNeeded = 0xc0190034 RmAlreadyStarted = 0xc0190035 FileIdentityNotPersistent = 0xc0190036 CantBreakTransactionalDependency = 0xc0190037 CantCrossRmBoundary = 0xc0190038 TxfDirNotEmpty = 0xc0190039 IndoubtTransactionsExist = 0xc019003a TmVolatile = 0xc019003b RollbackTimerExpired = 0xc019003c TxfAttributeCorrupt = 0xc019003d EfsNotAllowedInTransaction = 0xc019003e TransactionalOpenNotAllowed = 0xc019003f TransactedMappingUnsupportedRemote = 0xc0190040 TxfMetadataAlreadyPresent = 0xc0190041 TransactionScopeCallbacksNotSet = 0xc0190042 TransactionRequiredPromotion = 0xc0190043 CannotExecuteFileInTransaction = 0xc0190044 TransactionsNotFrozen = 0xc0190045 # endregion Error # region Network Error # Indicates the Domain was in the wrong state to perform the desired operation. InvalidDomainState = 0x00DD # This operation is only allowed for the Primary Domain Controller of the domain. InvalidDomainRole = 0x00DE # Indicates the Sam Server was in the wrong state to perform the desired operation. InvalidServerState = 0xC00000DC # The specified Domain did not exist. NoSuchDomain = 0xC00000DF # endregion Network Error # region RPC Error # TODO: Many RPC error codes are missing from here. # The authentication service is unknown. RpcUnknownAuthenticationService = 0xC0020030 # endregion RPC Error MaximumNtStatus = 0xffffffff pydsinternals-1.2.5/dsinternals/common/interop/enums/RegistryKeyRights.py000077500000000000000000000031431513773544400271000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : RegistryKeyRights.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class RegistryKeyRights(Enum): """ RegistryKeyRights Access rights for registry key objects. """ # Combines the STANDARD_RIGHTS_REQUIRED, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, and KEY_CREATE_LINK access rights. AllAccess = 0xF003F # Reserved for system use. CreateLink = 0x0020 # Required to create a subkey of a registry key. CreateSubKey = 0x0004 # Required to enumerate the subkeys of a registry key. EnumerateSubKeys = 0x0008 # Required to request change notifications for a registry key or for subkeys of a registry key. Notify = 0x0010 # Required to query the values of a registry key. QueryValue = 0x0001 # Combines the STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, and KEY_NOTIFY values. Read = 0x20019 # Equivalent to KEY_READ. Execute = Read # Required to create, delete, or set a registry value. SetValue = 0x0002 # Indicates that an application on 64-bit Windows should operate on the 32-bit registry view. This flag is ignored by 32-bit Windows. Wow6432Key = 0x0200 # Indicates that an application on 64-bit Windows should operate on the 64-bit registry view. This flag is ignored by 32-bit Windows. Wow6464Key = 0x0100 # Combines the STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, and KEY_CREATE_SUB_KEY access rights. Write = 0x20006 pydsinternals-1.2.5/dsinternals/common/interop/enums/Win32ErrorCode.py000077500000000000000000005573221513773544400261620ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : Win32ErrorCode.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class Win32ErrorCode(Enum): """ Win32ErrorCode Win32 Error Code See: https://msdn.microsoft.com/en-us/library/cc231199.aspx """ # The operation completed successfully. Success = 0 # Incorrect function. INVALID_FUNCTION = 1 # The system cannot find the file specified. FILE_NOT_FOUND = 2 # The system cannot find the path specified. PATH_NOT_FOUND = 3 # The system cannot open the file. TOO_MANY_OPEN_FILES = 4 # Access is denied. ACCESS_DENIED = 5 # The handle is invalid. INVALID_HANDLE = 6 # The storage control blocks were destroyed. ARENA_TRASHED = 7 # Not enough storage is available to process this command. NOT_ENOUGH_MEMORY = 8 # The storage control block address is invalid. INVALID_BLOCK = 9 # The environment is incorrect. BAD_ENVIRONMENT = 10 # An attempt was made to load a program with an incorrect format. BAD_FORMAT = 11 # The access code is invalid. INVALID_ACCESS = 12 # The data is invalid. INVALID_DATA = 13 # Not enough storage is available to complete this operation. OUTOFMEMORY = 14 # The system cannot find the drive specified. INVALID_DRIVE = 15 # The directory cannot be removed. CURRENT_DIRECTORY = 16 # The system cannot move the file to a different disk drive. NOT_SAME_DEVICE = 17 # There are no more files. NO_MORE_FILES = 18 # The media is write protected. WRITE_PROTECT = 19 # The system cannot find the device specified. BAD_UNIT = 20 # The device is not ready. NOT_READY = 21 # The device does not recognize the command. BAD_COMMAND = 22 # Data error (cyclic redundancy check). CRC = 23 # The program issued a command but the command length is incorrect. BAD_LENGTH = 24 # The drive cannot locate a specific area or track on the disk. SEEK = 25 # The specified disk or diskette cannot be accessed. NOT_DOS_DISK = 26 # The drive cannot find the sector requested. SECTOR_NOT_FOUND = 27 # The printer is out of paper. OUT_OF_PAPER = 28 # The system cannot write to the specified device. WRITE_FAULT = 29 # The system cannot read from the specified device. READ_FAULT = 30 # A device attached to the system is not functioning. GEN_FAILURE = 31 # The process cannot access the file because it is being used by another process. SHARING_VIOLATION = 32 # The process cannot access the file because another process has locked a portion of the file. LOCK_VIOLATION = 33 # The wrong diskette is in the drive. # Insert %2 (Volume Serial Number: %3) into drive %1. WRONG_DISK = 34 # Too many files opened for sharing. SHARING_BUFFER_EXCEEDED = 36 # Reached the end of the file. HANDLE_EOF = 38 # The disk is full. HANDLE_DISK_FULL = 39 # The request is not supported. NOT_SUPPORTED = 50 # Windows cannot find the network path. Verify that the network path is correct and the destination computer is not busy or turned off. If Windows still cannot find the network path, contact your network administrator. REM_NOT_LIST = 51 # You were not connected because a duplicate name exists on the network. Go to System in Control Panel to change the computer name and try again. DUP_NAME = 52 # The network path was not found. BAD_NETPATH = 53 # The network is busy. NETWORK_BUSY = 54 # The specified network resource or device is no longer available. DEV_NOT_EXIST = 55 # The network BIOS command limit has been reached. TOO_MANY_CMDS = 56 # A network adapter hardware error occurred. ADAP_HDW_ERR = 57 # The specified server cannot perform the requested operation. BAD_NET_RESP = 58 # An unexpected network error occurred. UNEXP_NET_ERR = 59 # The remote adapter is not compatible. BAD_REM_ADAP = 60 # The printer queue is full. PRINTQ_FULL = 61 # Space to store the file waiting to be printed is not available on the server. NO_SPOOL_SPACE = 62 # Your file waiting to be printed was deleted. PRINT_CANCELLED = 63 # The specified network name is no longer available. NETNAME_DELETED = 64 # Network access is denied. NETWORK_ACCESS_DENIED = 65 # The network resource type is not correct. BAD_DEV_TYPE = 66 # The network name cannot be found. BAD_NET_NAME = 67 # The name limit for the local computer network adapter card was exceeded. TOO_MANY_NAMES = 68 # The network BIOS session limit was exceeded. TOO_MANY_SESS = 69 # The remote server has been paused or is in the process of being started. SHARING_PAUSED = 70 # No more connections can be made to this remote computer at this time because there are already as many connections as the computer can accept. REQ_NOT_ACCEP = 71 # The specified printer or disk device has been paused. REDIR_PAUSED = 72 # The file exists. FILE_EXISTS = 80 # The directory or file cannot be created. CANNOT_MAKE = 82 # Fail on INT 24. FAIL_I24 = 83 # Storage to process this request is not available. OUT_OF_STRUCTURES = 84 # The local device name is already in use. ALREADY_ASSIGNED = 85 # The specified network password is not correct. INVALID_PASSWORD = 86 # The parameter is incorrect. INVALID_PARAMETER = 87 # A write fault occurred on the network. NET_WRITE_FAULT = 88 # The system cannot start another process at this time. NO_PROC_SLOTS = 89 # Cannot create another system semaphore. TOO_MANY_SEMAPHORES = 100 # The exclusive semaphore is owned by another process. EXCL_SEM_ALREADY_OWNED = 101 # The semaphore is set and cannot be closed. SEM_IS_SET = 102 # The semaphore cannot be set again. TOO_MANY_SEM_REQUESTS = 103 # Cannot request exclusive semaphores at interrupt time. INVALID_AT_INTERRUPT_TIME = 104 # The previous ownership of this semaphore has ended. SEM_OWNER_DIED = 105 # Insert the diskette for drive %1. SEM_USER_LIMIT = 106 # The program stopped because an alternate diskette was not inserted. DISK_CHANGE = 107 # The disk is in use or locked by another process. DRIVE_LOCKED = 108 # The pipe has been ended. BROKEN_PIPE = 109 # The system cannot open the device or file specified. OPEN_FAILED = 110 # The file name is too long. BUFFER_OVERFLOW = 111 # There is not enough space on the disk. DISK_FULL = 112 # No more internal file identifiers available. NO_MORE_SEARCH_HANDLES = 113 # The target internal file identifier is incorrect. INVALID_TARGET_HANDLE = 114 # The IOCTL call made by the application program is not correct. INVALID_CATEGORY = 117 # The verify-on-write switch parameter value is not correct. INVALID_VERIFY_SWITCH = 118 # The system does not support the command requested. BAD_DRIVER_LEVEL = 119 # This function is not supported on this system. CALL_NOT_IMPLEMENTED = 120 # The semaphore timeout period has expired. SEM_TIMEOUT = 121 # The data area passed to a system call is too small. INSUFFICIENT_BUFFER = 122 # The filename, directory name, or volume label syntax is incorrect. INVALID_NAME = 123 # The system call level is not correct. INVALID_LEVEL = 124 # The disk has no volume label. NO_VOLUME_LABEL = 125 # The specified module could not be found. MOD_NOT_FOUND = 126 # The specified procedure could not be found. PROC_NOT_FOUND = 127 # There are no child processes to wait for. WAIT_NO_CHILDREN = 128 # The %1 application cannot be run in Win32 mode. CHILD_NOT_COMPLETE = 129 # Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O. DIRECT_ACCESS_HANDLE = 130 # An attempt was made to move the file pointer before the beginning of the file. NEGATIVE_SEEK = 131 # The file pointer cannot be set on the specified device or file. SEEK_ON_DEVICE = 132 # A JOIN or SUBST command cannot be used for a drive that contains previously joined drives. IS_JOIN_TARGET = 133 # An attempt was made to use a JOIN or SUBST command on a drive that has already been joined. IS_JOINED = 134 # An attempt was made to use a JOIN or SUBST command on a drive that has already been substituted. IS_SUBSTED = 135 # The system tried to delete the JOIN of a drive that is not joined. NOT_JOINED = 136 # The system tried to delete the substitution of a drive that is not substituted. NOT_SUBSTED = 137 # The system tried to join a drive to a directory on a joined drive. JOIN_TO_JOIN = 138 # The system tried to substitute a drive to a directory on a substituted drive. SUBST_TO_SUBST = 139 # The system tried to join a drive to a directory on a substituted drive. JOIN_TO_SUBST = 140 # The system tried to SUBST a drive to a directory on a joined drive. SUBST_TO_JOIN = 141 # The system cannot perform a JOIN or SUBST at this time. BUSY_DRIVE = 142 # The system cannot join or substitute a drive to or for a directory on the same drive. SAME_DRIVE = 143 # The directory is not a subdirectory of the root directory. DIR_NOT_ROOT = 144 # The directory is not empty. DIR_NOT_EMPTY = 145 # The path specified is being used in a substitute. IS_SUBST_PATH = 146 # Not enough resources are available to process this command. IS_JOIN_PATH = 147 # The path specified cannot be used at this time. PATH_BUSY = 148 # An attempt was made to join or substitute a drive for which a directory on the drive is the target of a previous substitute. IS_SUBST_TARGET = 149 # System trace information was not specified in your CONFIG.SYS file, or tracing is disallowed. SYSTEM_TRACE = 150 # The number of specified semaphore events for DosMuxSemWait is not correct. INVALID_EVENT_COUNT = 151 # DosMuxSemWait did not execute, too many semaphores are already set. TOO_MANY_MUXWAITERS = 152 # The DosMuxSemWait list is not correct. INVALID_LIST_FORMAT = 153 # The volume label you entered exceeds the label character limit of the target file system. LABEL_TOO_LONG = 154 # Cannot create another thread. TOO_MANY_TCBS = 155 # The recipient process has refused the signal. SIGNAL_REFUSED = 156 # The segment is already discarded and cannot be locked. DISCARDED = 157 # The segment is already unlocked. NOT_LOCKED = 158 # The address for the thread ID is not correct. BAD_THREADID_ADDR = 159 # One or more arguments are not correct. BAD_ARGUMENTS = 160 # The specified path is invalid. BAD_PATHNAME = 161 # A signal is already pending. SIGNAL_PENDING = 162 # No more threads can be created in the system. MAX_THRDS_REACHED = 164 # Unable to lock a region of a file. LOCK_FAILED = 167 # The requested resource is in use. BUSY = 170 # A lock request was not outstanding for the supplied cancel region. CANCEL_VIOLATION = 173 # The file system does not support atomic changes to the lock type. ATOMIC_LOCKS_NOT_SUPPORTED = 174 # The system detected a segment number that was not correct. INVALID_SEGMENT_NUMBER = 180 # The operating system cannot run %1. INVALID_ORDINAL = 182 # Cannot create a file when that file already exists. ALREADY_EXISTS = 183 # The flag passed is not correct. INVALID_FLAG_NUMBER = 186 # The specified system semaphore name was not found. SEM_NOT_FOUND = 187 # The operating system cannot run %1. INVALID_STARTING_CODESEG = 188 # The operating system cannot run %1. INVALID_STACKSEG = 189 # The operating system cannot run %1. INVALID_MODULETYPE = 190 # Cannot run %1 in Win32 mode. INVALID_EXE_SIGNATURE = 191 # The operating system cannot run %1. EXE_MARKED_INVALID = 192 # %1 is not a valid Win32 application. BAD_EXE_FORMAT = 193 # The operating system cannot run %1. ITERATED_DATA_EXCEEDS_64k = 194 # The operating system cannot run %1. INVALID_MINALLOCSIZE = 195 # The operating system cannot run this application program. DYNLINK_FROM_INVALID_RING = 196 # The operating system is not presently configured to run this application. IOPL_NOT_ENABLED = 197 # The operating system cannot run %1. INVALID_SEGDPL = 198 # The operating system cannot run this application program. AUTODATASEG_EXCEEDS_64k = 199 # The code segment cannot be greater than or equal to 64K. RING2SEG_MUST_BE_MOVABLE = 200 # The operating system cannot run %1. RELOC_CHAIN_XEEDS_SEGLIM = 201 # The operating system cannot run %1. INFLOOP_IN_RELOC_CHAIN = 202 # The system could not find the environment option that was entered. ENVVAR_NOT_FOUND = 203 # No process in the command subtree has a signal handler. NO_SIGNAL_SENT = 205 # The filename or extension is too long. FILENAME_EXCED_RANGE = 206 # The ring 2 stack is in use. RING2_STACK_IN_USE = 207 # The global filename characters, * or ?, are entered incorrectly or too many global filename characters are specified. META_EXPANSION_TOO_LONG = 208 # The signal being posted is not correct. INVALID_SIGNAL_NUMBER = 209 # The signal handler cannot be set. THREAD_1_INACTIVE = 210 # The segment is locked and cannot be reallocated. LOCKED = 212 # Too many dynamic-link modules are attached to this program or dynamic-link module. TOO_MANY_MODULES = 214 # Cannot nest calls to LoadModule. NESTING_NOT_ALLOWED = 215 # The image file %1 is valid, but is for a machine type other than the current machine. EXE_MACHINE_TYPE_MISMATCH = 216 # No information avialable. EXE_CANNOT_MODIFY_SIGNED_BINARY = 217 # No information avialable. EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY = 218 # The pipe state is invalid. BAD_PIPE = 230 # All pipe instances are busy. PIPE_BUSY = 231 # The pipe is being closed. NO_DATA = 232 # No process is on the other end of the pipe. PIPE_NOT_CONNECTED = 233 # More data is available. MORE_DATA = 234 # The session was canceled. VC_DISCONNECTED = 240 # The specified extended attribute name was invalid. INVALID_EA_NAME = 254 # The extended attributes are inconsistent. EA_LIST_INCONSISTENT = 255 # The wait operation timed out. WAIT_TIMEOUT = 258 # No more data is available. NO_MORE_ITEMS = 259 # The copy functions cannot be used. CANNOT_COPY = 266 # The directory name is invalid. DIRECTORY = 267 # The extended attributes did not fit in the buffer. EAS_DIDNT_FIT = 275 # The extended attribute file on the mounted file system is corrupt. EA_FILE_CORRUPT = 276 # The extended attribute table file is full. EA_TABLE_FULL = 277 # The specified extended attribute handle is invalid. INVALID_EA_HANDLE = 278 # The mounted file system does not support extended attributes. EAS_NOT_SUPPORTED = 282 # Attempt to release mutex not owned by caller. NOT_OWNER = 288 # Too many posts were made to a semaphore. TOO_MANY_POSTS = 298 # Only part of a ReadProcessMemory or WriteProcessMemory request was completed. PARTIAL_COPY = 299 # The oplock request is denied. OPLOCK_NOT_GRANTED = 300 # An invalid oplock acknowledgment was received by the system. INVALID_OPLOCK_PROTOCOL = 301 # The volume is too fragmented to complete this operation. DISK_TOO_FRAGMENTED = 302 # The file cannot be opened because it is in the process of being deleted. DELETE_PENDING = 303 # The system cannot find message text for message number 0x%1 in the message file for %2. MR_MID_NOT_FOUND = 317 # No information avialable. SCOPE_NOT_FOUND = 318 # Attempt to access invalid address. INVALID_ADDRESS = 487 # Arithmetic result exceeded 32 bits. ARITHMETIC_OVERFLOW = 534 # There is a process on other end of the pipe. PIPE_CONNECTED = 535 # Waiting for a process to open the other end of the pipe. PIPE_LISTENING = 536 # Access to the extended attribute was denied. EA_ACCESS_DENIED = 994 # The I/O operation has been aborted because of either a thread exit or an application request. OPERATION_ABORTED = 995 # Overlapped I/O event is not in a signaled state. IO_INCOMPLETE = 996 # Overlapped I/O operation is in progress. IO_PENDING = 997 # Invalid access to memory location. NOACCESS = 998 # Error performing inpage operation. SWAPERROR = 999 # Recursion too deep, the stack overflowed. STACK_OVERFLOW = 1001 # The window cannot act on the sent message. INVALID_MESSAGE = 1002 # Cannot complete this function. CAN_NOT_COMPLETE = 1003 # Invalid flags. INVALID_FLAGS = 1004 # The volume does not contain a recognized file system. # Please make sure that all required file system drivers are loaded and that the volume is not corrupted. UNRECOGNIZED_VOLUME = 1005 # The volume for a file has been externally altered so that the opened file is no longer valid. FILE_INVALID = 1006 # The requested operation cannot be performed in full-screen mode. FULLSCREEN_MODE = 1007 # An attempt was made to reference a token that does not exist. NO_TOKEN = 1008 # The configuration registry database is corrupt. BADDB = 1009 # The configuration registry key is invalid. BADKEY = 1010 # The configuration registry key could not be opened. CANTOPEN = 1011 # The configuration registry key could not be read. CANTREAD = 1012 # The configuration registry key could not be written. CANTWRITE = 1013 # One of the files in the registry database had to be recovered by use of a log or alternate copy. The recovery was successful. REGISTRY_RECOVERED = 1014 # The registry is corrupted. The structure of one of the files containing registry data is corrupted, or the system's memory image of the file is corrupted, or the file could not be recovered because the alternate copy or log was absent or corrupted. REGISTRY_CORRUPT = 1015 # An I/O operation initiated by the registry failed unrecoverably. The registry could not read in, or write out, or flush, one of the files that contain the system's image of the registry. REGISTRY_IO_FAILED = 1016 # The system has attempted to load or restore a file into the registry, but the specified file is not in a registry file format. NOT_REGISTRY_FILE = 1017 # Illegal operation attempted on a registry key that has been marked for deletion. KEY_DELETED = 1018 # System could not allocate the required space in a registry log. NO_LOG_SPACE = 1019 # Cannot create a symbolic link in a registry key that already has subkeys or values. KEY_HAS_CHILDREN = 1020 # Cannot create a stable subkey under a volatile parent key. CHILD_MUST_BE_VOLATILE = 1021 # A notify change request is being completed and the information is not being returned in the caller's buffer. The caller now needs to enumerate the files to find the changes. NOTIFY_ENUM_DIR = 1022 # A stop control has been sent to a service that other running services are dependent on. DEPENDENT_SERVICES_RUNNING = 1051 # The requested control is not valid for this service. INVALID_SERVICE_CONTROL = 1052 # The service did not respond to the start or control request in a timely fashion. SERVICE_REQUEST_TIMEOUT = 1053 # A thread could not be created for the service. SERVICE_NO_THREAD = 1054 # The service database is locked. SERVICE_DATABASE_LOCKED = 1055 # An instance of the service is already running. SERVICE_ALREADY_RUNNING = 1056 # The account name is invalid or does not exist, or the password is invalid for the account name specified. INVALID_SERVICE_ACCOUNT = 1057 # The service cannot be started, either because it is disabled or because it has no enabled devices associated with it. SERVICE_DISABLED = 1058 # Circular service dependency was specified. CIRCULAR_DEPENDENCY = 1059 # The specified service does not exist as an installed service. SERVICE_DOES_NOT_EXIST = 1060 # The service cannot accept control messages at this time. SERVICE_CANNOT_ACCEPT_CTRL = 1061 # The service has not been started. SERVICE_NOT_ACTIVE = 1062 # The service process could not connect to the service controller. FAILED_SERVICE_CONTROLLER_CONNECT = 1063 # An exception occurred in the service when handling the control request. EXCEPTION_IN_SERVICE = 1064 # The database specified does not exist. DATABASE_DOES_NOT_EXIST = 1065 # The service has returned a service-specific error code. SERVICE_SPECIFIC_ERROR = 1066 # The process terminated unexpectedly. PROCESS_ABORTED = 1067 # The dependency service or group failed to start. SERVICE_DEPENDENCY_FAIL = 1068 # The service did not start due to a logon failure. SERVICE_LOGON_FAILED = 1069 # After starting, the service hung in a start-pending state. SERVICE_START_HANG = 1070 # The specified service database lock is invalid. INVALID_SERVICE_LOCK = 1071 # The specified service has been marked for deletion. SERVICE_MARKED_FOR_DELETE = 1072 # The specified service already exists. SERVICE_EXISTS = 1073 # The system is currently running with the last-known-good configuration. ALREADY_RUNNING_LKG = 1074 # The dependency service does not exist or has been marked for deletion. SERVICE_DEPENDENCY_DELETED = 1075 # The current boot has already been accepted for use as the last-known-good control set. BOOT_ALREADY_ACCEPTED = 1076 # No attempts to start the service have been made since the last boot. SERVICE_NEVER_STARTED = 1077 # The name is already in use as either a service name or a service display name. DUPLICATE_SERVICE_NAME = 1078 # The account specified for this service is different from the account specified for other services running in the same process. DIFFERENT_SERVICE_ACCOUNT = 1079 # Failure actions can only be set for Win32 services, not for drivers. CANNOT_DETECT_DRIVER_FAILURE = 1080 # This service runs in the same process as the service control manager. # Therefore, the service control manager cannot take action if this service's process terminates unexpectedly. CANNOT_DETECT_PROCESS_ABORT = 1081 # No recovery program has been configured for this service. NO_RECOVERY_PROGRAM = 1082 # The executable program that this service is configured to run in does not implement the service. SERVICE_NOT_IN_EXE = 1083 # This service cannot be started in Safe Mode NOT_SAFEBOOT_SERVICE = 1084 # The physical end of the tape has been reached. END_OF_MEDIA = 1100 # A tape access reached a filemark. FILEMARK_DETECTED = 1101 # The beginning of the tape or a partition was encountered. BEGINNING_OF_MEDIA = 1102 # A tape access reached the end of a set of files. SETMARK_DETECTED = 1103 # No more data is on the tape. NO_DATA_DETECTED = 1104 # Tape could not be partitioned. PARTITION_FAILURE = 1105 # When accessing a new tape of a multivolume partition, the current block size is incorrect. INVALID_BLOCK_LENGTH = 1106 # Tape partition information could not be found when loading a tape. DEVICE_NOT_PARTITIONED = 1107 # Unable to lock the media eject mechanism. UNABLE_TO_LOCK_MEDIA = 1108 # Unable to unload the media. UNABLE_TO_UNLOAD_MEDIA = 1109 # The media in the drive may have changed. MEDIA_CHANGED = 1110 # The I/O bus was reset. BUS_RESET = 1111 # No media in drive. NO_MEDIA_IN_DRIVE = 1112 # No mapping for the Unicode character exists in the target multi-byte code page. NO_UNICODE_TRANSLATION = 1113 # A dynamic link library (DLL) initialization routine failed. DLL_INIT_FAILED = 1114 # A system shutdown is in progress. SHUTDOWN_IN_PROGRESS = 1115 # Unable to abort the system shutdown because no shutdown was in progress. NO_SHUTDOWN_IN_PROGRESS = 1116 # The request could not be performed because of an I/O device error. IO_DEVICE = 1117 # No serial device was successfully initialized. The serial driver will unload. SERIAL_NO_DEVICE = 1118 # Unable to open a device that was sharing an interrupt request (IRQ) with other devices. At least one other device that uses that IRQ was already opened. IRQ_BUSY = 1119 # A serial I/O operation was completed by another write to the serial port. # (The IOCTL_SERIAL_XOFF_COUNTER reached zero.) MORE_WRITES = 1120 # A serial I/O operation completed because the timeout period expired. # (The IOCTL_SERIAL_XOFF_COUNTER did not reach zero.) COUNTER_TIMEOUT = 1121 # No ID address mark was found on the floppy disk. FLOPPY_ID_MARK_NOT_FOUND = 1122 # Mismatch between the floppy disk sector ID field and the floppy disk controller track address. FLOPPY_WRONG_CYLINDER = 1123 # The floppy disk controller reported an error that is not recognized by the floppy disk driver. FLOPPY_UNKNOWN_ERROR = 1124 # The floppy disk controller returned inconsistent results in its registers. FLOPPY_BAD_REGISTERS = 1125 # While accessing the hard disk, a recalibrate operation failed, even after retries. DISK_RECALIBRATE_FAILED = 1126 # While accessing the hard disk, a disk operation failed even after retries. DISK_OPERATION_FAILED = 1127 # While accessing the hard disk, a disk controller reset was needed, but even that failed. DISK_RESET_FAILED = 1128 # Physical end of tape encountered. EOM_OVERFLOW = 1129 # Not enough server storage is available to process this command. NOT_ENOUGH_SERVER_MEMORY = 1130 # A potential deadlock condition has been detected. POSSIBLE_DEADLOCK = 1131 # The base address or the file offset specified does not have the proper alignment. MAPPED_ALIGNMENT = 1132 # An attempt to change the system power state was vetoed by another application or driver. SET_POWER_STATE_VETOED = 1140 # The system BIOS failed an attempt to change the system power state. SET_POWER_STATE_FAILED = 1141 # An attempt was made to create more links on a file than the file system supports. TOO_MANY_LINKS = 1142 # The specified program requires a newer version of Windows. OLD_WIN_VERSION = 1150 # The specified program is not a Windows or MS-DOS program. APP_WRONG_OS = 1151 # Cannot start more than one instance of the specified program. SINGLE_INSTANCE_APP = 1152 # The specified program was written for an earlier version of Windows. RMODE_APP = 1153 # One of the library files needed to run this application is damaged. INVALID_DLL = 1154 # No application is associated with the specified file for this operation. NO_ASSOCIATION = 1155 # An error occurred in sending the command to the application. DDE_FAIL = 1156 # One of the library files needed to run this application cannot be found. DLL_NOT_FOUND = 1157 # The current process has used all of its system allowance of handles for Window Manager objects. NO_MORE_USER_HANDLES = 1158 # The message can be used only with synchronous operations. MESSAGE_SYNC_ONLY = 1159 # The indicated source element has no media. SOURCE_ELEMENT_EMPTY = 1160 # The indicated destination element already contains media. DESTINATION_ELEMENT_FULL = 1161 # The indicated element does not exist. ILLEGAL_ELEMENT_ADDRESS = 1162 # The indicated element is part of a magazine that is not present. MAGAZINE_NOT_PRESENT = 1163 # The indicated device requires reinitialization due to hardware errors. DEVICE_REINITIALIZATION_NEEDED = 1164 # The device has indicated that cleaning is required before further operations are attempted. DEVICE_REQUIRES_CLEANING = 1165 # The device has indicated that its door is open. DEVICE_DOOR_OPEN = 1166 # The device is not connected. DEVICE_NOT_CONNECTED = 1167 # Element not found. NOT_FOUND = 1168 # There was no match for the specified key in the index. NO_MATCH = 1169 # The property set specified does not exist on the object. SET_NOT_FOUND = 1170 # The point passed to GetMouseMovePoints is not in the buffer. POINT_NOT_FOUND = 1171 # The tracking (workstation) service is not running. NO_TRACKING_SERVICE = 1172 # The Volume ID could not be found. NO_VOLUME_ID = 1173 # Unable to remove the file to be replaced. UNABLE_TO_REMOVE_REPLACED = 1175 # Unable to move the replacement file to the file to be replaced. The file to be replaced has retained its original name. UNABLE_TO_MOVE_REPLACEMENT = 1176 # Unable to move the replacement file to the file to be replaced. The file to be replaced has been renamed using the backup name. UNABLE_TO_MOVE_REPLACEMENT_2 = 1177 # The volume change journal is being deleted. JOURNAL_DELETE_IN_PROGRESS = 1178 # The volume change journal is not active. JOURNAL_NOT_ACTIVE = 1179 # A file was found, but it may not be the correct file. POTENTIAL_FILE_FOUND = 1180 # The journal entry has been deleted from the journal. JOURNAL_ENTRY_DELETED = 1181 # The specified device name is invalid. BAD_DEVICE = 1200 # The device is not currently connected but it is a remembered connection. CONNECTION_UNAVAIL = 1201 # The local device name has a remembered connection to another network resource. DEVICE_ALREADY_REMEMBERED = 1202 # No network provider accepted the given network path. NO_NET_OR_BAD_PATH = 1203 # The specified network provider name is invalid. BAD_PROVIDER = 1204 # Unable to open the network connection profile. CANNOT_OPEN_PROFILE = 1205 # The network connection profile is corrupted. BAD_PROFILE = 1206 # Cannot enumerate a noncontainer. NOT_CONTAINER = 1207 # An extended error has occurred. EXTENDED_ERROR = 1208 # The format of the specified group name is invalid. INVALID_GROUPNAME = 1209 # The format of the specified computer name is invalid. INVALID_COMPUTERNAME = 1210 # The format of the specified event name is invalid. INVALID_EVENTNAME = 1211 # The format of the specified domain name is invalid. INVALID_DOMAINNAME = 1212 # The format of the specified service name is invalid. INVALID_SERVICENAME = 1213 # The format of the specified network name is invalid. INVALID_NETNAME = 1214 # The format of the specified share name is invalid. INVALID_SHARENAME = 1215 # The format of the specified password is invalid. INVALID_PASSWORDNAME = 1216 # The format of the specified message name is invalid. INVALID_MESSAGENAME = 1217 # The format of the specified message destination is invalid. INVALID_MESSAGEDEST = 1218 # Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again.. SESSION_CREDENTIAL_CONFLICT = 1219 # An attempt was made to establish a session to a network server, but there are already too many sessions established to that server. REMOTE_SESSION_LIMIT_EXCEEDED = 1220 # The workgroup or domain name is already in use by another computer on the network. DUP_DOMAINNAME = 1221 # The network is not present or not started. NO_NETWORK = 1222 # The operation was canceled by the user. CANCELLED = 1223 # The requested operation cannot be performed on a file with a user-mapped section open. USER_MAPPED_FILE = 1224 # The remote system refused the network connection. CONNECTION_REFUSED = 1225 # The network connection was gracefully closed. GRACEFUL_DISCONNECT = 1226 # The network transport endpoint already has an address associated with it. ADDRESS_ALREADY_ASSOCIATED = 1227 # An address has not yet been associated with the network endpoint. ADDRESS_NOT_ASSOCIATED = 1228 # An operation was attempted on a nonexistent network connection. CONNECTION_INVALID = 1229 # An invalid operation was attempted on an active network connection. CONNECTION_ACTIVE = 1230 # The network location cannot be reached. For information about network troubleshooting, see Windows Help. NETWORK_UNREACHABLE = 1231 # The network location cannot be reached. For information about network troubleshooting, see Windows Help. HOST_UNREACHABLE = 1232 # The network location cannot be reached. For information about network troubleshooting, see Windows Help. PROTOCOL_UNREACHABLE = 1233 # No service is operating at the destination network endpoint on the remote system. PORT_UNREACHABLE = 1234 # The request was aborted. REQUEST_ABORTED = 1235 # The network connection was aborted by the local system. CONNECTION_ABORTED = 1236 # The operation could not be completed. A retry should be performed. RETRY = 1237 # A connection to the server could not be made because the limit on the number of concurrent connections for this account has been reached. CONNECTION_COUNT_LIMIT = 1238 # Attempting to log in during an unauthorized time of day for this account. LOGIN_TIME_RESTRICTION = 1239 # The account is not authorized to log in from this station. LOGIN_WKSTA_RESTRICTION = 1240 # The network address could not be used for the operation requested. INCORRECT_ADDRESS = 1241 # The service is already registered. ALREADY_REGISTERED = 1242 # The specified service does not exist. SERVICE_NOT_FOUND = 1243 # The operation being requested was not performed because the user has not been authenticated. NOT_AUTHENTICATED = 1244 # The operation being requested was not performed because the user has not logged on to the network. # The specified service does not exist. NOT_LOGGED_ON = 1245 # Continue with work in progress. CONTINUE = 1246 # An attempt was made to perform an initialization operation when initialization has already been completed. ALREADY_INITIALIZED = 1247 # No more local devices. NO_MORE_DEVICES = 1248 # The specified site does not exist. NO_SUCH_SITE = 1249 # A domain controller with the specified name already exists. DOMAIN_CONTROLLER_EXISTS = 1250 # This operation is supported only when you are connected to the server. ONLY_IF_CONNECTED = 1251 # The group policy framework should call the extension even if there are no changes. OVERRIDE_NOCHANGES = 1252 # The specified user does not have a valid profile. BAD_USER_PROFILE = 1253 # This operation is not supported on a Microsoft Small Business Server NOT_SUPPORTED_ON_SBS = 1254 # The server machine is shutting down. SERVER_SHUTDOWN_IN_PROGRESS = 1255 # The remote system is not available. For information about network troubleshooting, see Windows Help. HOST_DOWN = 1256 # The security identifier provided is not from an account domain. NON_ACCOUNT_SID = 1257 # The security identifier provided does not have a domain component. NON_DOMAIN_SID = 1258 # AppHelp dialog canceled thus preventing the application from starting. APPHELP_BLOCK = 1259 # Windows cannot open this program because it has been prevented by a software restriction policy. For more information, open Event Viewer or contact your system administrator. ACCESS_DISABLED_BY_POLICY = 1260 # A program attempt to use an invalid register value. Normally caused by an uninitialized register. This error is Itanium specific. REG_NAT_CONSUMPTION = 1261 # The share is currently offline or does not exist. CSCSHARE_OFFLINE = 1262 # The kerberos protocol encountered an error while validating the # KDC certificate during smartcard logon. PKINIT_FAILURE = 1263 # The kerberos protocol encountered an error while attempting to utilize # the smartcard subsystem. SMARTCARD_SUBSYSTEM_FAILURE = 1264 # The system detected a possible attempt to compromise security. Please ensure that you can contact the server that authenticated you. DOWNGRADE_DETECTED = 1265 # The machine is locked and can not be shut down without the force option. MACHINE_LOCKED = 1271 # An application-defined callback gave invalid data when called. CALLBACK_SUPPLIED_INVALID_DATA = 1273 # The group policy framework should call the extension in the synchronous foreground policy refresh. SYNC_FOREGROUND_REFRESH_REQUIRED = 1274 # This driver has been blocked from loading DRIVER_BLOCKED = 1275 # A dynamic link library (DLL) referenced a module that was neither a DLL nor the process's executable image. INVALID_IMPORT_OF_NON_DLL = 1276 # No information avialable. ACCESS_DISABLED_WEBBLADE = 1277 # No information avialable. ACCESS_DISABLED_WEBBLADE_TAMPER = 1278 # No information avialable. RECOVERY_FAILURE = 1279 # No information avialable. ALREADY_FIBER = 1280 # No information avialable. ALREADY_THREAD = 1281 # No information avialable. STACK_BUFFER_OVERRUN = 1282 # No information avialable. PARAMETER_QUOTA_EXCEEDED = 1283 # No information avialable. DEBUGGER_INACTIVE = 1284 # No information avialable. DELAY_LOAD_FAILED = 1285 # No information avialable. VDM_DISALLOWED = 1286 # Not all privileges referenced are assigned to the caller. NOT_ALL_ASSIGNED = 1300 # Some mapping between account names and security IDs was not done. SOME_NOT_MAPPED = 1301 # No system quota limits are specifically set for this account. NO_QUOTAS_FOR_ACCOUNT = 1302 # No encryption key is available. A well-known encryption key was returned. LOCAL_USER_SESSION_KEY = 1303 # The password is too complex to be converted to a LAN Manager password. The LAN Manager password returned is a NULL string. NULL_LM_PASSWORD = 1304 # The revision level is unknown. UNKNOWN_REVISION = 1305 # Indicates two revision levels are incompatible. REVISION_MISMATCH = 1306 # This security ID may not be assigned as the owner of this object. INVALID_OWNER = 1307 # This security ID may not be assigned as the primary group of an object. INVALID_PRIMARY_GROUP = 1308 # An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client. NO_IMPERSONATION_TOKEN = 1309 # The group may not be disabled. CANT_DISABLE_MANDATORY = 1310 # There are currently no logon servers available to service the logon request. NO_LOGON_SERVERS = 1311 # A specified logon session does not exist. It may already have been terminated. NO_SUCH_LOGON_SESSION = 1312 # A specified privilege does not exist. NO_SUCH_PRIVILEGE = 1313 # A required privilege is not held by the client. PRIVILEGE_NOT_HELD = 1314 # The name provided is not a properly formed account name. INVALID_ACCOUNT_NAME = 1315 # The specified user already exists. USER_EXISTS = 1316 # The specified user does not exist. NO_SUCH_USER = 1317 # The specified group already exists. GROUP_EXISTS = 1318 # The specified group does not exist. NO_SUCH_GROUP = 1319 # Either the specified user account is already a member of the specified group, or the specified group cannot be deleted because it contains a member. MEMBER_IN_GROUP = 1320 # The specified user account is not a member of the specified group account. MEMBER_NOT_IN_GROUP = 1321 # The last remaining administration account cannot be disabled or deleted. LAST_ADMIN = 1322 # Unable to update the password. The value provided as the current password is incorrect. WRONG_PASSWORD = 1323 # Unable to update the password. The value provided for the new password contains values that are not allowed in passwords. ILL_FORMED_PASSWORD = 1324 # Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirement of the domain. PASSWORD_RESTRICTION = 1325 # Logon failure: unknown user name or bad password. LOGON_FAILURE = 1326 # Logon failure: user account restriction. Possible reasons are blank passwords not allowed, logon hour restrictions, or a policy restriction has been enforced. ACCOUNT_RESTRICTION = 1327 # Logon failure: account logon time restriction violation. INVALID_LOGON_HOURS = 1328 # Logon failure: user not allowed to log on to this computer. INVALID_WORKSTATION = 1329 # Logon failure: the specified account password has expired. PASSWORD_EXPIRED = 1330 # Logon failure: account currently disabled. ACCOUNT_DISABLED = 1331 # No mapping between account names and security IDs was done. NONE_MAPPED = 1332 # Too many local user identifiers (LUIDs) were requested at one time. TOO_MANY_LUIDS_REQUESTED = 1333 # No more local user identifiers (LUIDs) are available. LUIDS_EXHAUSTED = 1334 # The subauthority part of a security ID is invalid for this particular use. INVALID_SUB_AUTHORITY = 1335 # The access control list (ACL) structure is invalid. INVALID_ACL = 1336 # The security ID structure is invalid. INVALID_SID = 1337 # The security descriptor structure is invalid. INVALID_SECURITY_DESCR = 1338 # The inherited access control list (ACL) or access control entry (ACE) could not be built. BAD_INHERITANCE_ACL = 1340 # The server is currently disabled. SERVER_DISABLED = 1341 # The server is currently enabled. SERVER_NOT_DISABLED = 1342 # The value provided was an invalid value for an identifier authority. INVALID_ID_AUTHORITY = 1343 # No more memory is available for security information updates. ALLOTTED_SPACE_EXCEEDED = 1344 # The specified attributes are invalid, or incompatible with the attributes for the group as a whole. INVALID_GROUP_ATTRIBUTES = 1345 # Either a required impersonation level was not provided, or the provided impersonation level is invalid. BAD_IMPERSONATION_LEVEL = 1346 # Cannot open an anonymous level security token. CANT_OPEN_ANONYMOUS = 1347 # The validation information class requested was invalid. BAD_VALIDATION_CLASS = 1348 # The type of the token is inappropriate for its attempted use. BAD_TOKEN_TYPE = 1349 # Unable to perform a security operation on an object that has no associated security. NO_SECURITY_ON_OBJECT = 1350 # Configuration information could not be read from the domain controller, either because the machine is unavailable, or access has been denied. CANT_ACCESS_DOMAIN_INFO = 1351 # The security account manager (SAM) or local security authority (LSA) server was in the wrong state to perform the security operation. INVALID_SERVER_STATE = 1352 # The domain was in the wrong state to perform the security operation. INVALID_DOMAIN_STATE = 1353 # This operation is only allowed for the Primary Domain Controller of the domain. INVALID_DOMAIN_ROLE = 1354 # The specified domain either does not exist or could not be contacted. NO_SUCH_DOMAIN = 1355 # The specified domain already exists. DOMAIN_EXISTS = 1356 # An attempt was made to exceed the limit on the number of domains per server. DOMAIN_LIMIT_EXCEEDED = 1357 # Unable to complete the requested operation because of either a catastrophic media failure or a data structure corruption on the disk. INTERNAL_DB_CORRUPTION = 1358 # An internal error occurred. INTERNAL_ERROR = 1359 # Generic access types were contained in an access mask which should already be mapped to nongeneric types. GENERIC_NOT_MAPPED = 1360 # A security descriptor is not in the right format (absolute or self-relative). BAD_DESCRIPTOR_FORMAT = 1361 # The requested action is restricted for use by logon processes only. The calling process has not registered as a logon process. NOT_LOGON_PROCESS = 1362 # Cannot start a new logon session with an ID that is already in use. LOGON_SESSION_EXISTS = 1363 # A specified authentication package is unknown. NO_SUCH_PACKAGE = 1364 # The logon session is not in a state that is consistent with the requested operation. BAD_LOGON_SESSION_STATE = 1365 # The logon session ID is already in use. LOGON_SESSION_COLLISION = 1366 # A logon request contained an invalid logon type value. INVALID_LOGON_TYPE = 1367 # Unable to impersonate using a named pipe until data has been read from that pipe. CANNOT_IMPERSONATE = 1368 # The transaction state of a registry subtree is incompatible with the requested operation. RXACT_INVALID_STATE = 1369 # An internal security database corruption has been encountered. RXACT_COMMIT_FAILURE = 1370 # Cannot perform this operation on built-in accounts. SPECIAL_ACCOUNT = 1371 # Cannot perform this operation on this built-in special group. SPECIAL_GROUP = 1372 # Cannot perform this operation on this built-in special user. SPECIAL_USER = 1373 # The user cannot be removed from a group because the group is currently the user's primary group. MEMBERS_PRIMARY_GROUP = 1374 # The token is already in use as a primary token. TOKEN_ALREADY_IN_USE = 1375 # The specified local group does not exist. NO_SUCH_ALIAS = 1376 # The specified account name is not a member of the local group. MEMBER_NOT_IN_ALIAS = 1377 # The specified account name is already a member of the local group. MEMBER_IN_ALIAS = 1378 # The specified local group already exists. ALIAS_EXISTS = 1379 # Logon failure: the user has not been granted the requested logon type at this computer. LOGON_NOT_GRANTED = 1380 # The maximum number of secrets that may be stored in a single system has been exceeded. TOO_MANY_SECRETS = 1381 # The length of a secret exceeds the maximum length allowed. SECRET_TOO_LONG = 1382 # The local security authority database contains an internal inconsistency. INTERNAL_DB_ERROR = 1383 # During a logon attempt, the user's security context accumulated too many security IDs. TOO_MANY_CONTEXT_IDS = 1384 # Logon failure: the user has not been granted the requested logon type at this computer. LOGON_TYPE_NOT_GRANTED = 1385 # A cross-encrypted password is necessary to change a user password. NT_CROSS_ENCRYPTION_REQUIRED = 1386 # A member could not be added to or removed from the local group because the member does not exist. NO_SUCH_MEMBER = 1387 # A new member could not be added to a local group because the member has the wrong account type. INVALID_MEMBER = 1388 # Too many security IDs have been specified. TOO_MANY_SIDS = 1389 # A cross-encrypted password is necessary to change this user password. LM_CROSS_ENCRYPTION_REQUIRED = 1390 # Indicates an ACL contains no inheritable components. NO_INHERITANCE = 1391 # The file or directory is corrupted and unreadable. FILE_CORRUPT = 1392 # The disk structure is corrupted and unreadable. DISK_CORRUPT = 1393 # There is no user session key for the specified logon session. NO_USER_SESSION_KEY = 1394 # The service being accessed is licensed for a particular number of connections. # No more connections can be made to the service at this time because there are already as many connections as the service can accept. LICENSE_QUOTA_EXCEEDED = 1395 # Logon Failure: The target account name is incorrect. WRONG_TARGET_NAME = 1396 # Mutual Authentication failed. The server's password is out of date at the domain controller. MUTUAL_AUTH_FAILED = 1397 # There is a time and/or date difference between the client and server. TIME_SKEW = 1398 # This operation can not be performed on the current domain. CURRENT_DOMAIN_NOT_ALLOWED = 1399 # Invalid window handle. INVALID_WINDOW_HANDLE = 1400 # Invalid menu handle. INVALID_MENU_HANDLE = 1401 # Invalid cursor handle. INVALID_CURSOR_HANDLE = 1402 # Invalid accelerator table handle. INVALID_ACCEL_HANDLE = 1403 # Invalid hook handle. INVALID_HOOK_HANDLE = 1404 # Invalid handle to a multiple-window position structure. INVALID_DWP_HANDLE = 1405 # Cannot create a top-level child window. TLW_WITH_WSCHILD = 1406 # Cannot find window class. CANNOT_FIND_WND_CLASS = 1407 # Invalid window, it belongs to other thread. WINDOW_OF_OTHER_THREAD = 1408 # Hot key is already registered. HOTKEY_ALREADY_REGISTERED = 1409 # Class already exists. CLASS_ALREADY_EXISTS = 1410 # Class does not exist. CLASS_DOES_NOT_EXIST = 1411 # Class still has open windows. CLASS_HAS_WINDOWS = 1412 # Invalid index. INVALID_INDEX = 1413 # Invalid icon handle. INVALID_ICON_HANDLE = 1414 # Using private DIALOG window words. PRIVATE_DIALOG_INDEX = 1415 # The list box identifier was not found. LISTBOX_ID_NOT_FOUND = 1416 # No wildcards were found. NO_WILDCARD_CHARACTERS = 1417 # Thread does not have a clipboard open. CLIPBOARD_NOT_OPEN = 1418 # Hot key is not registered. HOTKEY_NOT_REGISTERED = 1419 # The window is not a valid dialog window. WINDOW_NOT_DIALOG = 1420 # Control ID not found. CONTROL_ID_NOT_FOUND = 1421 # Invalid message for a combo box because it does not have an edit control. INVALID_COMBOBOX_MESSAGE = 1422 # The window is not a combo box. WINDOW_NOT_COMBOBOX = 1423 # Height must be less than 256. INVALID_EDIT_HEIGHT = 1424 # Invalid device context (DC) handle. DC_NOT_FOUND = 1425 # Invalid hook procedure type. INVALID_HOOK_FILTER = 1426 # Invalid hook procedure. INVALID_FILTER_PROC = 1427 # Cannot set nonlocal hook without a module handle. HOOK_NEEDS_HMOD = 1428 # This hook procedure can only be set globally. GLOBAL_ONLY_HOOK = 1429 # The journal hook procedure is already installed. JOURNAL_HOOK_SET = 1430 # The hook procedure is not installed. HOOK_NOT_INSTALLED = 1431 # Invalid message for single-selection list box. INVALID_LB_MESSAGE = 1432 # LB_SETCOUNT sent to non-lazy list box. SETCOUNT_ON_BAD_LB = 1433 # This list box does not support tab stops. LB_WITHOUT_TABSTOPS = 1434 # Cannot destroy object created by another thread. DESTROY_OBJECT_OF_OTHER_THREAD = 1435 # Child windows cannot have menus. CHILD_WINDOW_MENU = 1436 # The window does not have a system menu. NO_SYSTEM_MENU = 1437 # Invalid message box style. INVALID_MSGBOX_STYLE = 1438 # Invalid system-wide (SPI_*) parameter. INVALID_SPI_VALUE = 1439 # Screen already locked. SCREEN_ALREADY_LOCKED = 1440 # All handles to windows in a multiple-window position structure must have the same parent. HWNDS_HAVE_DIFF_PARENT = 1441 # The window is not a child window. NOT_CHILD_WINDOW = 1442 # Invalid GW_* command. INVALID_GW_COMMAND = 1443 # Invalid thread identifier. INVALID_THREAD_ID = 1444 # Cannot process a message from a window that is not a multiple document interface (MDI) window. NON_MDICHILD_WINDOW = 1445 # Popup menu already active. POPUP_ALREADY_ACTIVE = 1446 # The window does not have scroll bars. NO_SCROLLBARS = 1447 # Scroll bar range cannot be greater than MAXLONG. INVALID_SCROLLBAR_RANGE = 1448 # Cannot show or remove the window in the way specified. INVALID_SHOWWIN_COMMAND = 1449 # Insufficient system resources exist to complete the requested service. NO_SYSTEM_RESOURCES = 1450 # Insufficient system resources exist to complete the requested service. NONPAGED_SYSTEM_RESOURCES = 1451 # Insufficient system resources exist to complete the requested service. PAGED_SYSTEM_RESOURCES = 1452 # Insufficient quota to complete the requested service. WORKING_SET_QUOTA = 1453 # Insufficient quota to complete the requested service. PAGEFILE_QUOTA = 1454 # The paging file is too small for this operation to complete. COMMITMENT_LIMIT = 1455 # A menu item was not found. MENU_ITEM_NOT_FOUND = 1456 # Invalid keyboard layout handle. INVALID_KEYBOARD_HANDLE = 1457 # Hook type not allowed. HOOK_TYPE_NOT_ALLOWED = 1458 # This operation requires an interactive window station. REQUIRES_INTERACTIVE_WINDOWSTATION = 1459 # This operation returned because the timeout period expired. TIMEOUT = 1460 # Invalid monitor handle. INVALID_MONITOR_HANDLE = 1461 # The event log file is corrupted. EVENTLOG_FILE_CORRUPT = 1500 # No event log file could be opened, so the event logging service did not start. EVENTLOG_CANT_START = 1501 # The event log file is full. LOG_FILE_FULL = 1502 # The event log file has changed between read operations. EVENTLOG_FILE_CHANGED = 1503 # The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance. INSTALL_SERVICE_FAILURE = 1601 # User cancelled installation. INSTALL_USEREXIT = 1602 # Fatal error during installation. INSTALL_FAILURE = 1603 # Installation suspended, incomplete. INSTALL_SUSPEND = 1604 # This action is only valid for products that are currently installed. UNKNOWN_PRODUCT = 1605 # Feature ID not registered. UNKNOWN_FEATURE = 1606 # Component ID not registered. UNKNOWN_COMPONENT = 1607 # Unknown property. UNKNOWN_PROPERTY = 1608 # Handle is in an invalid state. INVALID_HANDLE_STATE = 1609 # The configuration data for this product is corrupt. Contact your support personnel. BAD_CONFIGURATION = 1610 # Component qualifier not present. INDEX_ABSENT = 1611 # The installation source for this product is not available. Verify that the source exists and that you can access it. INSTALL_SOURCE_ABSENT = 1612 # This installation package cannot be installed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service. INSTALL_PACKAGE_VERSION = 1613 # Product is uninstalled. PRODUCT_UNINSTALLED = 1614 # SQL query syntax invalid or unsupported. BAD_QUERY_SYNTAX = 1615 # Record field does not exist. INVALID_FIELD = 1616 # The device has been removed. DEVICE_REMOVED = 1617 # Another installation is already in progress. Complete that installation before proceeding with this install. INSTALL_ALREADY_RUNNING = 1618 # This installation package could not be opened. Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package. INSTALL_PACKAGE_OPEN_FAILED = 1619 # This installation package could not be opened. Contact the application vendor to verify that this is a valid Windows Installer package. INSTALL_PACKAGE_INVALID = 1620 # There was an error starting the Windows Installer service user interface. Contact your support personnel. INSTALL_UI_FAILURE = 1621 # Error opening installation log file. Verify that the specified log file location exists and that you can write to it. INSTALL_LOG_FAILURE = 1622 # The language of this installation package is not supported by your system. INSTALL_LANGUAGE_UNSUPPORTED = 1623 # Error applying transforms. Verify that the specified transform paths are valid. INSTALL_TRANSFORM_FAILURE = 1624 # This installation is forbidden by system policy. Contact your system administrator. INSTALL_PACKAGE_REJECTED = 1625 # Function could not be executed. FUNCTION_NOT_CALLED = 1626 # Function failed during execution. FUNCTION_FAILED = 1627 # Invalid or unknown table specified. INVALID_TABLE = 1628 # Data supplied is of wrong type. DATATYPE_MISMATCH = 1629 # Data of this type is not supported. UNSUPPORTED_TYPE = 1630 # The Windows Installer service failed to start. Contact your support personnel. CREATE_FAILED = 1631 # The Temp folder is on a drive that is full or is inaccessible. Free up space on the drive or verify that you have write permission on the Temp folder. INSTALL_TEMP_UNWRITABLE = 1632 # This installation package is not supported by this processor type. Contact your product vendor. INSTALL_PLATFORM_UNSUPPORTED = 1633 # Component not used on this computer. INSTALL_NOTUSED = 1634 # This patch package could not be opened. Verify that the patch package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer patch package. PATCH_PACKAGE_OPEN_FAILED = 1635 # This patch package could not be opened. Contact the application vendor to verify that this is a valid Windows Installer patch package. PATCH_PACKAGE_INVALID = 1636 # This patch package cannot be processed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service. PATCH_PACKAGE_UNSUPPORTED = 1637 # Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel. PRODUCT_VERSION = 1638 # Invalid command line argument. Consult the Windows Installer SDK for detailed command line help. INVALID_COMMAND_LINE = 1639 # Only administrators have permission to add, remove, or configure server software during a Terminal services remote session. If you want to install or configure software on the server, contact your network administrator. INSTALL_REMOTE_DISALLOWED = 1640 # The requested operation completed successfully. The system will be restarted so the changes can take effect. SUCCESS_REBOOT_INITIATED = 1641 # The upgrade patch cannot be installed by the Windows Installer service because the program to be upgraded may be missing, or the upgrade patch may update a different version of the program. Verify that the program to be upgraded exists on your computer an # d that you have the correct upgrade patch. PATCH_TARGET_NOT_FOUND = 1642 # The patch package is not permitted by software restriction policy. PATCH_PACKAGE_REJECTED = 1643 # One or more customizations are not permitted by software restriction policy. INSTALL_TRANSFORM_REJECTED = 1644 # No information avialable. INSTALL_REMOTE_PROHIBITED = 1645 # The string binding is invalid. RPC_S_INVALID_STRING_BINDING = 1700 # The binding handle is not the correct type. RPC_S_WRONG_KIND_OF_BINDING = 1701 # The binding handle is invalid. RPC_S_INVALID_BINDING = 1702 # The RPC protocol sequence is not supported. RPC_S_PROTSEQ_NOT_SUPPORTED = 1703 # The RPC protocol sequence is invalid. RPC_S_INVALID_RPC_PROTSEQ = 1704 # The string universal unique identifier (UUID) is invalid. RPC_S_INVALID_STRING_UUID = 1705 # The endpoint format is invalid. RPC_S_INVALID_ENDPOINT_FORMAT = 1706 # The network address is invalid. RPC_S_INVALID_NET_ADDR = 1707 # No endpoint was found. RPC_S_NO_ENDPOINT_FOUND = 1708 # The timeout value is invalid. RPC_S_INVALID_TIMEOUT = 1709 # The object universal unique identifier (UUID) was not found. RPC_S_OBJECT_NOT_FOUND = 1710 # The object universal unique identifier (UUID) has already been registered. RPC_S_ALREADY_REGISTERED = 1711 # The type universal unique identifier (UUID) has already been registered. RPC_S_TYPE_ALREADY_REGISTERED = 1712 # The RPC server is already listening. RPC_S_ALREADY_LISTENING = 1713 # No protocol sequences have been registered. RPC_S_NO_PROTSEQS_REGISTERED = 1714 # The RPC server is not listening. RPC_S_NOT_LISTENING = 1715 # The manager type is unknown. RPC_S_UNKNOWN_MGR_TYPE = 1716 # The interface is unknown. RPC_S_UNKNOWN_IF = 1717 # There are no bindings. RPC_S_NO_BINDINGS = 1718 # There are no protocol sequences. RPC_S_NO_PROTSEQS = 1719 # The endpoint cannot be created. RPC_S_CANT_CREATE_ENDPOINT = 1720 # Not enough resources are available to complete this operation. RPC_S_OUT_OF_RESOURCES = 1721 # The RPC server is unavailable. RPC_S_SERVER_UNAVAILABLE = 1722 # The RPC server is too busy to complete this operation. RPC_S_SERVER_TOO_BUSY = 1723 # The network options are invalid. RPC_S_INVALID_NETWORK_OPTIONS = 1724 # There are no remote procedure calls active on this thread. RPC_S_NO_CALL_ACTIVE = 1725 # The remote procedure call failed. RPC_S_CALL_FAILED = 1726 # The remote procedure call failed and did not execute. RPC_S_CALL_FAILED_DNE = 1727 # A remote procedure call (RPC) protocol error occurred. RPC_S_PROTOCOL_ERROR = 1728 # The transfer syntax is not supported by the RPC server. RPC_S_UNSUPPORTED_TRANS_SYN = 1730 # The universal unique identifier (UUID) type is not supported. RPC_S_UNSUPPORTED_TYPE = 1732 # The tag is invalid. RPC_S_INVALID_TAG = 1733 # The array bounds are invalid. RPC_S_INVALID_BOUND = 1734 # The binding does not contain an entry name. RPC_S_NO_ENTRY_NAME = 1735 # The name syntax is invalid. RPC_S_INVALID_NAME_SYNTAX = 1736 # The name syntax is not supported. RPC_S_UNSUPPORTED_NAME_SYNTAX = 1737 # No network address is available to use to construct a universal unique identifier (UUID). RPC_S_UUID_NO_ADDRESS = 1739 # The endpoint is a duplicate. RPC_S_DUPLICATE_ENDPOINT = 1740 # The authentication type is unknown. RPC_S_UNKNOWN_AUTHN_TYPE = 1741 # The maximum number of calls is too small. RPC_S_MAX_CALLS_TOO_SMALL = 1742 # The string is too long. RPC_S_STRING_TOO_LONG = 1743 # The RPC protocol sequence was not found. RPC_S_PROTSEQ_NOT_FOUND = 1744 # The procedure number is out of range. RPC_S_PROCNUM_OUT_OF_RANGE = 1745 # The binding does not contain any authentication information. RPC_S_BINDING_HAS_NO_AUTH = 1746 # The authentication service is unknown. RPC_S_UNKNOWN_AUTHN_SERVICE = 1747 # The authentication level is unknown. RPC_S_UNKNOWN_AUTHN_LEVEL = 1748 # The security context is invalid. RPC_S_INVALID_AUTH_IDENTITY = 1749 # The authorization service is unknown. RPC_S_UNKNOWN_AUTHZ_SERVICE = 1750 # The entry is invalid. EPT_S_INVALID_ENTRY = 1751 # The server endpoint cannot perform the operation. EPT_S_CANT_PERFORM_OP = 1752 # There are no more endpoints available from the endpoint mapper. EPT_S_NOT_REGISTERED = 1753 # No interfaces have been exported. RPC_S_NOTHING_TO_EXPORT = 1754 # The entry name is incomplete. RPC_S_INCOMPLETE_NAME = 1755 # The version option is invalid. RPC_S_INVALID_VERS_OPTION = 1756 # There are no more members. RPC_S_NO_MORE_MEMBERS = 1757 # There is nothing to unexport. RPC_S_NOT_ALL_OBJS_UNEXPORTED = 1758 # The interface was not found. RPC_S_INTERFACE_NOT_FOUND = 1759 # The entry already exists. RPC_S_ENTRY_ALREADY_EXISTS = 1760 # The entry is not found. RPC_S_ENTRY_NOT_FOUND = 1761 # The name service is unavailable. RPC_S_NAME_SERVICE_UNAVAILABLE = 1762 # The network address family is invalid. RPC_S_INVALID_NAF_ID = 1763 # The requested operation is not supported. RPC_S_CANNOT_SUPPORT = 1764 # No security context is available to allow impersonation. RPC_S_NO_CONTEXT_AVAILABLE = 1765 # An internal error occurred in a remote procedure call (RPC). RPC_S_INTERNAL_ERROR = 1766 # The RPC server attempted an integer division by zero. RPC_S_ZERO_DIVIDE = 1767 # An addressing error occurred in the RPC server. RPC_S_ADDRESS_ERROR = 1768 # A floating-point operation at the RPC server caused a division by zero. RPC_S_FP_DIV_ZERO = 1769 # A floating-point underflow occurred at the RPC server. RPC_S_FP_UNDERFLOW = 1770 # A floating-point overflow occurred at the RPC server. RPC_S_FP_OVERFLOW = 1771 # The list of RPC servers available for the binding of auto handles has been exhausted. RPC_X_NO_MORE_ENTRIES = 1772 # Unable to open the character translation table file. RPC_X_SS_CHAR_TRANS_OPEN_FAIL = 1773 # The file containing the character translation table has fewer than 512 bytes. RPC_X_SS_CHAR_TRANS_LONG_FILE = 1774 # A null context handle was passed from the client to the host during a remote procedure call. RPC_X_SS_IN_NULL_CONTEXT = 1775 # The context handle changed during a remote procedure call. RPC_X_SS_CONTEXT_DAMAGED = 1777 # The binding handles passed to a remote procedure call do not match. RPC_X_SS_HANDLES_MISMATCH = 1778 # The stub is unable to get the remote procedure call handle. RPC_X_SS_CANNOT_GET_CALL_HANDLE = 1779 # A null reference pointer was passed to the stub. RPC_X_NULL_REF_POINTER = 1780 # The enumeration value is out of range. RPC_X_ENUM_VALUE_OUT_OF_RANGE = 1781 # The byte count is too small. RPC_X_BYTE_COUNT_TOO_SMALL = 1782 # The stub received bad data. RPC_X_BAD_STUB_DATA = 1783 # The supplied user buffer is not valid for the requested operation. INVALID_USER_BUFFER = 1784 # The disk media is not recognized. It may not be formatted. UNRECOGNIZED_MEDIA = 1785 # The workstation does not have a trust secret. NO_TRUST_LSA_SECRET = 1786 # The security database on the server does not have a computer account for this workstation trust relationship. NO_TRUST_SAM_ACCOUNT = 1787 # The trust relationship between the primary domain and the trusted domain failed. TRUSTED_DOMAIN_FAILURE = 1788 # The trust relationship between this workstation and the primary domain failed. TRUSTED_RELATIONSHIP_FAILURE = 1789 # The network logon failed. TRUST_FAILURE = 1790 # A remote procedure call is already in progress for this thread. RPC_S_CALL_IN_PROGRESS = 1791 # An attempt was made to logon, but the network logon service was not started. NETLOGON_NOT_STARTED = 1792 # The user's account has expired. ACCOUNT_EXPIRED = 1793 # The redirector is in use and cannot be unloaded. REDIRECTOR_HAS_OPEN_HANDLES = 1794 # The specified printer driver is already installed. PRINTER_DRIVER_ALREADY_INSTALLED = 1795 # The specified port is unknown. UNKNOWN_PORT = 1796 # The printer driver is unknown. UNKNOWN_PRINTER_DRIVER = 1797 # The print processor is unknown. UNKNOWN_PRINTPROCESSOR = 1798 # The specified separator file is invalid. INVALID_SEPARATOR_FILE = 1799 # The specified priority is invalid. INVALID_PRIORITY = 1800 # The printer name is invalid. INVALID_PRINTER_NAME = 1801 # The printer already exists. PRINTER_ALREADY_EXISTS = 1802 # The printer command is invalid. INVALID_PRINTER_COMMAND = 1803 # The specified datatype is invalid. INVALID_DATATYPE = 1804 # The environment specified is invalid. INVALID_ENVIRONMENT = 1805 # There are no more bindings. RPC_S_NO_MORE_BINDINGS = 1806 # The account used is an interdomain trust account. Use your global user account or local user account to access this server. NOLOGON_INTERDOMAIN_TRUST_ACCOUNT = 1807 # The account used is a computer account. Use your global user account or local user account to access this server. NOLOGON_WORKSTATION_TRUST_ACCOUNT = 1808 # The account used is a server trust account. Use your global user account or local user account to access this server. NOLOGON_SERVER_TRUST_ACCOUNT = 1809 # The name or security ID (SID) of the domain specified is inconsistent with the trust information for that domain. DOMAIN_TRUST_INCONSISTENT = 1810 # The server is in use and cannot be unloaded. SERVER_HAS_OPEN_HANDLES = 1811 # The specified image file did not contain a resource section. RESOURCE_DATA_NOT_FOUND = 1812 # The specified resource type cannot be found in the image file. RESOURCE_TYPE_NOT_FOUND = 1813 # The specified resource name cannot be found in the image file. RESOURCE_NAME_NOT_FOUND = 1814 # The specified resource language ID cannot be found in the image file. RESOURCE_LANG_NOT_FOUND = 1815 # Not enough quota is available to process this command. NOT_ENOUGH_QUOTA = 1816 # No interfaces have been registered. RPC_S_NO_INTERFACES = 1817 # The remote procedure call was cancelled. RPC_S_CALL_CANCELLED = 1818 # The binding handle does not contain all required information. RPC_S_BINDING_INCOMPLETE = 1819 # A communications failure occurred during a remote procedure call. RPC_S_COMM_FAILURE = 1820 # The requested authentication level is not supported. RPC_S_UNSUPPORTED_AUTHN_LEVEL = 1821 # No principal name registered. RPC_S_NO_PRINC_NAME = 1822 # The error specified is not a valid Windows RPC error code. RPC_S_NOT_RPC_ERROR = 1823 # A UUID that is valid only on this computer has been allocated. RPC_S_UUID_LOCAL_ONLY = 1824 # A security package specific error occurred. RPC_S_SEC_PKG_ERROR = 1825 # Thread is not canceled. RPC_S_NOT_CANCELLED = 1826 # Invalid operation on the encoding/decoding handle. RPC_X_INVALID_ES_ACTION = 1827 # Incompatible version of the serializing package. RPC_X_WRONG_ES_VERSION = 1828 # Incompatible version of the RPC stub. RPC_X_WRONG_STUB_VERSION = 1829 # The RPC pipe object is invalid or corrupted. RPC_X_INVALID_PIPE_OBJECT = 1830 # An invalid operation was attempted on an RPC pipe object. RPC_X_WRONG_PIPE_ORDER = 1831 # Unsupported RPC pipe version. RPC_X_WRONG_PIPE_VERSION = 1832 # The group member was not found. RPC_S_GROUP_MEMBER_NOT_FOUND = 1898 # The endpoint mapper database entry could not be created. EPT_S_CANT_CREATE = 1899 # The object universal unique identifier (UUID) is the nil UUID. RPC_S_INVALID_OBJECT = 1900 # The specified time is invalid. INVALID_TIME = 1901 # The specified form name is invalid. INVALID_FORM_NAME = 1902 # The specified form size is invalid. INVALID_FORM_SIZE = 1903 # The specified printer handle is already being waited on ALREADY_WAITING = 1904 # The specified printer has been deleted. PRINTER_DELETED = 1905 # The state of the printer is invalid. INVALID_PRINTER_STATE = 1906 # The user's password must be changed before logging on the first time. PASSWORD_MUST_CHANGE = 1907 # Could not find the domain controller for this domain. DOMAIN_CONTROLLER_NOT_FOUND = 1908 # The referenced account is currently locked out and may not be logged on to. ACCOUNT_LOCKED_OUT = 1909 # The object exporter specified was not found. OR_INVALID_OXID = 1910 # The object specified was not found. OR_INVALID_OID = 1911 # The object resolver set specified was not found. OR_INVALID_SET = 1912 # Some data remains to be sent in the request buffer. RPC_S_SEND_INCOMPLETE = 1913 # Invalid asynchronous remote procedure call handle. RPC_S_INVALID_ASYNC_HANDLE = 1914 # Invalid asynchronous RPC call handle for this operation. RPC_S_INVALID_ASYNC_CALL = 1915 # The RPC pipe object has already been closed. RPC_X_PIPE_CLOSED = 1916 # The RPC call completed before all pipes were processed. RPC_X_PIPE_DISCIPLINE_ERROR = 1917 # No more data is available from the RPC pipe. RPC_X_PIPE_EMPTY = 1918 # No site name is available for this machine. NO_SITENAME = 1919 # The file can not be accessed by the system. CANT_ACCESS_FILE = 1920 # The name of the file cannot be resolved by the system. CANT_RESOLVE_FILENAME = 1921 # The entry is not of the expected type. RPC_S_ENTRY_TYPE_MISMATCH = 1922 # Not all object UUIDs could be exported to the specified entry. RPC_S_NOT_ALL_OBJS_EXPORTED = 1923 # Interface could not be exported to the specified entry. RPC_S_INTERFACE_NOT_EXPORTED = 1924 # The specified profile entry could not be added. RPC_S_PROFILE_NOT_ADDED = 1925 # The specified profile element could not be added. RPC_S_PRF_ELT_NOT_ADDED = 1926 # The specified profile element could not be removed. RPC_S_PRF_ELT_NOT_REMOVED = 1927 # The group element could not be added. RPC_S_GRP_ELT_NOT_ADDED = 1928 # The group element could not be removed. RPC_S_GRP_ELT_NOT_REMOVED = 1929 # The printer driver is not compatible with a policy enabled on your computer that blocks NT 4.0 drivers. KM_DRIVER_BLOCKED = 1930 # The context has expired and can no longer be used. CONTEXT_EXPIRED = 1931 # No information avialable. PER_USER_TRUST_QUOTA_EXCEEDED = 1932 # No information avialable. ALL_USER_TRUST_QUOTA_EXCEEDED = 1933 # No information avialable. USER_DELETE_TRUST_QUOTA_EXCEEDED = 1934 # No information avialable. AUTHENTICATION_FIREWALL_FAILED = 1935 # No information avialable. REMOTE_PRINT_CONNECTIONS_BLOCKED = 1936 # The pixel format is invalid. INVALID_PIXEL_FORMAT = 2000 # The specified driver is invalid. BAD_DRIVER = 2001 # The window style or class attribute is invalid for this operation. INVALID_WINDOW_STYLE = 2002 # The requested metafile operation is not supported. METAFILE_NOT_SUPPORTED = 2003 # The requested transformation operation is not supported. TRANSFORM_NOT_SUPPORTED = 2004 # The requested clipping operation is not supported. CLIPPING_NOT_SUPPORTED = 2005 # The specified color management module is invalid. INVALID_CMM = 2010 # The specified color profile is invalid. INVALID_PROFILE = 2011 # The specified tag was not found. TAG_NOT_FOUND = 2012 # A required tag is not present. TAG_NOT_PRESENT = 2013 # The specified tag is already present. DUPLICATE_TAG = 2014 # The specified color profile is not associated with any device. PROFILE_NOT_ASSOCIATED_WITH_DEVICE = 2015 # The specified color profile was not found. PROFILE_NOT_FOUND = 2016 # The specified color space is invalid. INVALID_COLORSPACE = 2017 # Image Color Management is not enabled. ICM_NOT_ENABLED = 2018 # There was an error while deleting the color transform. DELETING_ICM_XFORM = 2019 # The specified color transform is invalid. INVALID_TRANSFORM = 2020 # The specified transform does not match the bitmap's color space. COLORSPACE_MISMATCH = 2021 # The specified named color index is not present in the profile. INVALID_COLORINDEX = 2022 # The network connection was made successfully, but the user had to be prompted for a password other than the one originally specified. CONNECTED_OTHER_PASSWORD = 2108 # The network connection was made successfully using default credentials. CONNECTED_OTHER_PASSWORD_DEFAULT = 2109 # The specified username is invalid. BAD_USERNAME = 2202 # This network connection does not exist. NOT_CONNECTED = 2250 # This network connection has files open or requests pending. OPEN_FILES = 2401 # Active connections still exist. ACTIVE_CONNECTIONS = 2402 # The device is in use by an active process and cannot be disconnected. DEVICE_IN_USE = 2404 # The specified print monitor is unknown. UNKNOWN_PRINT_MONITOR = 3000 # The specified printer driver is currently in use. PRINTER_DRIVER_IN_USE = 3001 # The spool file was not found. SPOOL_FILE_NOT_FOUND = 3002 # A StartDocPrinter call was not issued. SPL_NO_STARTDOC = 3003 # An AddJob call was not issued. SPL_NO_ADDJOB = 3004 # The specified print processor has already been installed. PRINT_PROCESSOR_ALREADY_INSTALLED = 3005 # The specified print monitor has already been installed. PRINT_MONITOR_ALREADY_INSTALLED = 3006 # The specified print monitor does not have the required functions. INVALID_PRINT_MONITOR = 3007 # The specified print monitor is currently in use. PRINT_MONITOR_IN_USE = 3008 # The requested operation is not allowed when there are jobs queued to the printer. PRINTER_HAS_JOBS_QUEUED = 3009 # The requested operation is successful. Changes will not be effective until the system is rebooted. SUCCESS_REBOOT_REQUIRED = 3010 # The requested operation is successful. Changes will not be effective until the service is restarted. SUCCESS_RESTART_REQUIRED = 3011 # No printers were found. PRINTER_NOT_FOUND = 3012 # The printer driver is known to be unreliable. PRINTER_DRIVER_WARNED = 3013 # The printer driver is known to harm the system. PRINTER_DRIVER_BLOCKED = 3014 # WINS encountered an error while processing the command. WINS_INTERNAL = 4000 # The local WINS can not be deleted. CAN_NOT_DEL_LOCAL_WINS = 4001 # The importation from the file failed. STATIC_INIT = 4002 # The backup failed. Was a full backup done before? INC_BACKUP = 4003 # The backup failed. Check the directory to which you are backing the database. FULL_BACKUP = 4004 # The name does not exist in the WINS database. REC_NON_EXISTENT = 4005 # Replication with a nonconfigured partner is not allowed. RPL_NOT_ALLOWED = 4006 # The DHCP client has obtained an IP address that is already in use on the network. The local interface will be disabled until the DHCP client can obtain a new address. DHCP_ADDRESS_CONFLICT = 4100 # The GUID passed was not recognized as valid by a WMI data provider. WMI_GUID_NOT_FOUND = 4200 # The instance name passed was not recognized as valid by a WMI data provider. WMI_INSTANCE_NOT_FOUND = 4201 # The data item ID passed was not recognized as valid by a WMI data provider. WMI_ITEMID_NOT_FOUND = 4202 # The WMI request could not be completed and should be retried. WMI_TRY_AGAIN = 4203 # The WMI data provider could not be located. WMI_DP_NOT_FOUND = 4204 # The WMI data provider references an instance set that has not been registered. WMI_UNRESOLVED_INSTANCE_REF = 4205 # The WMI data block or event notification has already been enabled. WMI_ALREADY_ENABLED = 4206 # The WMI data block is no longer available. WMI_GUID_DISCONNECTED = 4207 # The WMI data service is not available. WMI_SERVER_UNAVAILABLE = 4208 # The WMI data provider failed to carry out the request. WMI_DP_FAILED = 4209 # The WMI MOF information is not valid. WMI_INVALID_MOF = 4210 # The WMI registration information is not valid. WMI_INVALID_REGINFO = 4211 # The WMI data block or event notification has already been disabled. WMI_ALREADY_DISABLED = 4212 # The WMI data item or data block is read only. WMI_READ_ONLY = 4213 # The WMI data item or data block could not be changed. WMI_SET_FAILURE = 4214 # The media identifier does not represent a valid medium. INVALID_MEDIA = 4300 # The library identifier does not represent a valid library. INVALID_LIBRARY = 4301 # The media pool identifier does not represent a valid media pool. INVALID_MEDIA_POOL = 4302 # The drive and medium are not compatible or exist in different libraries. DRIVE_MEDIA_MISMATCH = 4303 # The medium currently exists in an offline library and must be online to perform this operation. MEDIA_OFFLINE = 4304 # The operation cannot be performed on an offline library. LIBRARY_OFFLINE = 4305 # The library, drive, or media pool is empty. EMPTY = 4306 # The library, drive, or media pool must be empty to perform this operation. NOT_EMPTY = 4307 # No media is currently available in this media pool or library. MEDIA_UNAVAILABLE = 4308 # A resource required for this operation is disabled. RESOURCE_DISABLED = 4309 # The media identifier does not represent a valid cleaner. INVALID_CLEANER = 4310 # The drive cannot be cleaned or does not support cleaning. UNABLE_TO_CLEAN = 4311 # The object identifier does not represent a valid object. OBJECT_NOT_FOUND = 4312 # Unable to read from or write to the database. DATABASE_FAILURE = 4313 # The database is full. DATABASE_FULL = 4314 # The medium is not compatible with the device or media pool. MEDIA_INCOMPATIBLE = 4315 # The resource required for this operation does not exist. RESOURCE_NOT_PRESENT = 4316 # The operation identifier is not valid. INVALID_OPERATION = 4317 # The media is not mounted or ready for use. MEDIA_NOT_AVAILABLE = 4318 # The device is not ready for use. DEVICE_NOT_AVAILABLE = 4319 # The operator or administrator has refused the request. REQUEST_REFUSED = 4320 # The drive identifier does not represent a valid drive. INVALID_DRIVE_OBJECT = 4321 # Library is full. No slot is available for use. LIBRARY_FULL = 4322 # The transport cannot access the medium. MEDIUM_NOT_ACCESSIBLE = 4323 # Unable to load the medium into the drive. UNABLE_TO_LOAD_MEDIUM = 4324 # Unable to retrieve the drive status. UNABLE_TO_INVENTORY_DRIVE = 4325 # Unable to retrieve the slot status. UNABLE_TO_INVENTORY_SLOT = 4326 # Unable to retrieve status about the transport. UNABLE_TO_INVENTORY_TRANSPORT = 4327 # Cannot use the transport because it is already in use. TRANSPORT_FULL = 4328 # Unable to open or close the inject/eject port. CONTROLLING_IEPORT = 4329 # Unable to eject the medium because it is in a drive. UNABLE_TO_EJECT_MOUNTED_MEDIA = 4330 # A cleaner slot is already reserved. CLEANER_SLOT_SET = 4331 # A cleaner slot is not reserved. CLEANER_SLOT_NOT_SET = 4332 # The cleaner cartridge has performed the maximum number of drive cleanings. CLEANER_CARTRIDGE_SPENT = 4333 # Unexpected on-medium identifier. UNEXPECTED_OMID = 4334 # The last remaining item in this group or resource cannot be deleted. CANT_DELETE_LAST_ITEM = 4335 # The message provided exceeds the maximum size allowed for this parameter. MESSAGE_EXCEEDS_MAX_SIZE = 4336 # The volume contains system or paging files. VOLUME_CONTAINS_SYS_FILES = 4337 # The media type cannot be removed from this library since at least one drive in the library reports it can support this media type. INDIGENOUS_TYPE = 4338 # This offline media cannot be mounted on this system since no enabled drives are present which can be used. NO_SUPPORTING_DRIVES = 4339 # A cleaner cartridge is present in the tape library. CLEANER_CARTRIDGE_INSTALLED = 4340 # The remote storage service was not able to recall the file. FILE_OFFLINE = 4350 # The remote storage service is not operational at this time. REMOTE_STORAGE_NOT_ACTIVE = 4351 # The remote storage service encountered a media error. REMOTE_STORAGE_MEDIA_ERROR = 4352 # The file or directory is not a reparse point. NOT_A_REPARSE_POINT = 4390 # The reparse point attribute cannot be set because it conflicts with an existing attribute. REPARSE_ATTRIBUTE_CONFLICT = 4391 # The data present in the reparse point buffer is invalid. INVALID_REPARSE_DATA = 4392 # The tag present in the reparse point buffer is invalid. REPARSE_TAG_INVALID = 4393 # There is a mismatch between the tag specified in the request and the tag present in the reparse point. REPARSE_TAG_MISMATCH = 4394 # Single Instance Storage is not available on this volume. VOLUME_NOT_SIS_ENABLED = 4500 # The cluster resource cannot be moved to another group because other resources are dependent on it. DEPENDENT_RESOURCE_EXISTS = 5001 # The cluster resource dependency cannot be found. DEPENDENCY_NOT_FOUND = 5002 # The cluster resource cannot be made dependent on the specified resource because it is already dependent. DEPENDENCY_ALREADY_EXISTS = 5003 # The cluster resource is not online. RESOURCE_NOT_ONLINE = 5004 # A cluster node is not available for this operation. HOST_NODE_NOT_AVAILABLE = 5005 # The cluster resource is not available. RESOURCE_NOT_AVAILABLE = 5006 # The cluster resource could not be found. RESOURCE_NOT_FOUND = 5007 # The cluster is being shut down. SHUTDOWN_CLUSTER = 5008 # A cluster node cannot be evicted from the cluster unless the node is down or it is the last node. CANT_EVICT_ACTIVE_NODE = 5009 # The object already exists. OBJECT_ALREADY_EXISTS = 5010 # The object is already in the list. OBJECT_IN_LIST = 5011 # The cluster group is not available for any new requests. GROUP_NOT_AVAILABLE = 5012 # The cluster group could not be found. GROUP_NOT_FOUND = 5013 # The operation could not be completed because the cluster group is not online. GROUP_NOT_ONLINE = 5014 # The cluster node is not the owner of the resource. HOST_NODE_NOT_RESOURCE_OWNER = 5015 # The cluster node is not the owner of the group. HOST_NODE_NOT_GROUP_OWNER = 5016 # The cluster resource could not be created in the specified resource monitor. RESMON_CREATE_FAILED = 5017 # The cluster resource could not be brought online by the resource monitor. RESMON_ONLINE_FAILED = 5018 # The operation could not be completed because the cluster resource is online. RESOURCE_ONLINE = 5019 # The cluster resource could not be deleted or brought offline because it is the quorum resource. QUORUM_RESOURCE = 5020 # The cluster could not make the specified resource a quorum resource because it is not capable of being a quorum resource. NOT_QUORUM_CAPABLE = 5021 # The cluster software is shutting down. CLUSTER_SHUTTING_DOWN = 5022 # The group or resource is not in the correct state to perform the requested operation. INVALID_STATE = 5023 # The properties were stored but not all changes will take effect until the next time the resource is brought online. RESOURCE_PROPERTIES_STORED = 5024 # The cluster could not make the specified resource a quorum resource because it does not belong to a shared storage class. NOT_QUORUM_CLASS = 5025 # The cluster resource could not be deleted since it is a core resource. CORE_RESOURCE = 5026 # The quorum resource failed to come online. QUORUM_RESOURCE_ONLINE_FAILED = 5027 # The quorum log could not be created or mounted successfully. QUORUMLOG_OPEN_FAILED = 5028 # The cluster log is corrupt. CLUSTERLOG_CORRUPT = 5029 # The record could not be written to the cluster log since it exceeds the maximum size. CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE = 5030 # The cluster log exceeds its maximum size. CLUSTERLOG_EXCEEDS_MAXSIZE = 5031 # No checkpoint record was found in the cluster log. CLUSTERLOG_CHKPOINT_NOT_FOUND = 5032 # The minimum required disk space needed for logging is not available. CLUSTERLOG_NOT_ENOUGH_SPACE = 5033 # The cluster node failed to take control of the quorum resource because the resource is owned by another active node. QUORUM_OWNER_ALIVE = 5034 # A cluster network is not available for this operation. NETWORK_NOT_AVAILABLE = 5035 # A cluster node is not available for this operation. NODE_NOT_AVAILABLE = 5036 # All cluster nodes must be running to perform this operation. ALL_NODES_NOT_AVAILABLE = 5037 # A cluster resource failed. RESOURCE_FAILED = 5038 # The cluster node is not valid. CLUSTER_INVALID_NODE = 5039 # The cluster node already exists. CLUSTER_NODE_EXISTS = 5040 # A node is in the process of joining the cluster. CLUSTER_JOIN_IN_PROGRESS = 5041 # The cluster node was not found. CLUSTER_NODE_NOT_FOUND = 5042 # The cluster local node information was not found. CLUSTER_LOCAL_NODE_NOT_FOUND = 5043 # The cluster network already exists. CLUSTER_NETWORK_EXISTS = 5044 # The cluster network was not found. CLUSTER_NETWORK_NOT_FOUND = 5045 # The cluster network interface already exists. CLUSTER_NETINTERFACE_EXISTS = 5046 # The cluster network interface was not found. CLUSTER_NETINTERFACE_NOT_FOUND = 5047 # The cluster request is not valid for this object. CLUSTER_INVALID_REQUEST = 5048 # The cluster network provider is not valid. CLUSTER_INVALID_NETWORK_PROVIDER = 5049 # The cluster node is down. CLUSTER_NODE_DOWN = 5050 # The cluster node is not reachable. CLUSTER_NODE_UNREACHABLE = 5051 # The cluster node is not a member of the cluster. CLUSTER_NODE_NOT_MEMBER = 5052 # A cluster join operation is not in progress. CLUSTER_JOIN_NOT_IN_PROGRESS = 5053 # The cluster network is not valid. CLUSTER_INVALID_NETWORK = 5054 # The cluster node is up. CLUSTER_NODE_UP = 5056 # The cluster IP address is already in use. CLUSTER_IPADDR_IN_USE = 5057 # The cluster node is not paused. CLUSTER_NODE_NOT_PAUSED = 5058 # No cluster security context is available. CLUSTER_NO_SECURITY_CONTEXT = 5059 # The cluster network is not configured for internal cluster communication. CLUSTER_NETWORK_NOT_INTERNAL = 5060 # The cluster node is already up. CLUSTER_NODE_ALREADY_UP = 5061 # The cluster node is already down. CLUSTER_NODE_ALREADY_DOWN = 5062 # The cluster network is already online. CLUSTER_NETWORK_ALREADY_ONLINE = 5063 # The cluster network is already offline. CLUSTER_NETWORK_ALREADY_OFFLINE = 5064 # The cluster node is already a member of the cluster. CLUSTER_NODE_ALREADY_MEMBER = 5065 # The cluster network is the only one configured for internal cluster communication between two or more active cluster nodes. The internal communication capability cannot be removed from the network. CLUSTER_LAST_INTERNAL_NETWORK = 5066 # One or more cluster resources depend on the network to provide service to clients. The client access capability cannot be removed from the network. CLUSTER_NETWORK_HAS_DEPENDENTS = 5067 # This operation cannot be performed on the cluster resource as it the quorum resource. You may not bring the quorum resource offline or modify its possible owners list. INVALID_OPERATION_ON_QUORUM = 5068 # The cluster quorum resource is not allowed to have any dependencies. DEPENDENCY_NOT_ALLOWED = 5069 # The cluster node is paused. CLUSTER_NODE_PAUSED = 5070 # The cluster resource cannot be brought online. The owner node cannot run this resource. NODE_CANT_HOST_RESOURCE = 5071 # The cluster node is not ready to perform the requested operation. CLUSTER_NODE_NOT_READY = 5072 # The cluster node is shutting down. CLUSTER_NODE_SHUTTING_DOWN = 5073 # The cluster join operation was aborted. CLUSTER_JOIN_ABORTED = 5074 # The cluster join operation failed due to incompatible software versions between the joining node and its sponsor. CLUSTER_INCOMPATIBLE_VERSIONS = 5075 # This resource cannot be created because the cluster has reached the limit on the number of resources it can monitor. CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED = 5076 # The system configuration changed during the cluster join or form operation. The join or form operation was aborted. CLUSTER_SYSTEM_CONFIG_CHANGED = 5077 # The specified resource type was not found. CLUSTER_RESOURCE_TYPE_NOT_FOUND = 5078 # The specified node does not support a resource of this type. This may be due to version inconsistencies or due to the absence of the resource DLL on this node. CLUSTER_RESTYPE_NOT_SUPPORTED = 5079 # The specified resource name is not supported by this resource DLL. This may be due to a bad (or changed) name supplied to the resource DLL. CLUSTER_RESNAME_NOT_FOUND = 5080 # No authentication package could be registered with the RPC server. CLUSTER_NO_RPC_PACKAGES_REGISTERED = 5081 # You cannot bring the group online because the owner of the group is not in the preferred list for the group. To change the owner node for the group, move the group. CLUSTER_OWNER_NOT_IN_PREFLIST = 5082 # The join operation failed because the cluster database sequence number has changed or is incompatible with the locker node. This may happen during a join operation if the cluster database was changing during the join. CLUSTER_DATABASE_SEQMISMATCH = 5083 # The resource monitor will not allow the fail operation to be performed while the resource is in its current state. This may happen if the resource is in a pending state. RESMON_INVALID_STATE = 5084 # A non locker code got a request to reserve the lock for making global updates. CLUSTER_GUM_NOT_LOCKER = 5085 # The quorum disk could not be located by the cluster service. QUORUM_DISK_NOT_FOUND = 5086 # The backed up cluster database is possibly corrupt. DATABASE_BACKUP_CORRUPT = 5087 # A DFS root already exists in this cluster node. CLUSTER_NODE_ALREADY_HAS_DFS_ROOT = 5088 # An attempt to modify a resource property failed because it conflicts with another existing property. RESOURCE_PROPERTY_UNCHANGEABLE = 5089 # An operation was attempted that is incompatible with the current membership state of the node. CLUSTER_MEMBERSHIP_INVALID_STATE = 5890 # The quorum resource does not contain the quorum log. CLUSTER_QUORUMLOG_NOT_FOUND = 5891 # The membership engine requested shutdown of the cluster service on this node. CLUSTER_MEMBERSHIP_HALT = 5892 # The join operation failed because the cluster instance ID of the joining node does not match the cluster instance ID of the sponsor node. CLUSTER_INSTANCE_ID_MISMATCH = 5893 # A matching network for the specified IP address could not be found. Please also specify a subnet mask and a cluster network. CLUSTER_NETWORK_NOT_FOUND_FOR_IP = 5894 # The actual data type of the property did not match the expected data type of the property. CLUSTER_PROPERTY_DATA_TYPE_MISMATCH = 5895 # The cluster node was evicted from the cluster successfully, but the node was not cleaned up. Extended status information explaining why the node was not cleaned up is available. CLUSTER_EVICT_WITHOUT_CLEANUP = 5896 # Two or more parameter values specified for a resource's properties are in conflict. CLUSTER_PARAMETER_MISMATCH = 5897 # This computer cannot be made a member of a cluster. NODE_CANNOT_BE_CLUSTERED = 5898 # This computer cannot be made a member of a cluster because it does not have the correct version of Windows installed. CLUSTER_WRONG_OS_VERSION = 5899 # A cluster cannot be created with the specified cluster name because that cluster name is already in use. Specify a different name for the cluster. CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME = 5900 # No information avialable. CLUSCFG_ALREADY_COMMITTED = 5901 # No information avialable. CLUSCFG_ROLLBACK_FAILED = 5902 # No information avialable. CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT = 5903 # No information avialable. CLUSTER_OLD_VERSION = 5904 # No information avialable. CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME = 5905 # The specified file could not be encrypted. ENCRYPTION_FAILED = 6000 # The specified file could not be decrypted. DECRYPTION_FAILED = 6001 # The specified file is encrypted and the user does not have the ability to decrypt it. FILE_ENCRYPTED = 6002 # There is no valid encryption recovery policy configured for this system. NO_RECOVERY_POLICY = 6003 # The required encryption driver is not loaded for this system. NO_EFS = 6004 # The file was encrypted with a different encryption driver than is currently loaded. WRONG_EFS = 6005 # There are no EFS keys defined for the user. NO_USER_KEYS = 6006 # The specified file is not encrypted. FILE_NOT_ENCRYPTED = 6007 # The specified file is not in the defined EFS export format. NOT_EXPORT_FORMAT = 6008 # The specified file is read only. FILE_READ_ONLY = 6009 # The directory has been disabled for encryption. DIR_EFS_DISALLOWED = 6010 # The server is not trusted for remote encryption operation. EFS_SERVER_NOT_TRUSTED = 6011 # Recovery policy configured for this system contains invalid recovery certificate. BAD_RECOVERY_POLICY = 6012 # The encryption algorithm used on the source file needs a bigger key buffer than the one on the destination file. EFS_ALG_BLOB_TOO_BIG = 6013 # The disk partition does not support file encryption. VOLUME_NOT_SUPPORT_EFS = 6014 # This machine is disabled for file encryption. EFS_DISABLED = 6015 # A newer system is required to decrypt this encrypted file. EFS_VERSION_NOT_SUPPORT = 6016 # The list of servers for this workgroup is not currently available NO_BROWSER_SERVERS_FOUND = 6118 # The Task Scheduler service must be configured to run in the System account to function properly. Individual tasks may be configured to run in other accounts. SCHED_E_SERVICE_NOT_LOCALSYSTEM = 6200 # The specified session name is invalid. CTX_WINSTATION_NAME_INVALID = 7001 # The specified protocol driver is invalid. CTX_INVALID_PD = 7002 # The specified protocol driver was not found in the system path. CTX_PD_NOT_FOUND = 7003 # The specified terminal connection driver was not found in the system path. CTX_WD_NOT_FOUND = 7004 # A registry key for event logging could not be created for this session. CTX_CANNOT_MAKE_EVENTLOG_ENTRY = 7005 # A service with the same name already exists on the system. CTX_SERVICE_NAME_COLLISION = 7006 # A close operation is pending on the session. CTX_CLOSE_PENDING = 7007 # There are no free output buffers available. CTX_NO_OUTBUF = 7008 # The MODEM.INF file was not found. CTX_MODEM_INF_NOT_FOUND = 7009 # The modem name was not found in MODEM.INF. CTX_INVALID_MODEMNAME = 7010 # The modem did not accept the command sent to it. Verify that the configured modem name matches the attached modem. CTX_MODEM_RESPONSE_ERROR = 7011 # The modem did not respond to the command sent to it. Verify that the modem is properly cabled and powered on. CTX_MODEM_RESPONSE_TIMEOUT = 7012 # Carrier detect has failed or carrier has been dropped due to disconnect. CTX_MODEM_RESPONSE_NO_CARRIER = 7013 # Dial tone not detected within the required time. Verify that the phone cable is properly attached and functional. CTX_MODEM_RESPONSE_NO_DIALTONE = 7014 # Busy signal detected at remote site on callback. CTX_MODEM_RESPONSE_BUSY = 7015 # Voice detected at remote site on callback. CTX_MODEM_RESPONSE_VOICE = 7016 # Transport driver error CTX_TD_ERROR = 7017 # The specified session cannot be found. CTX_WINSTATION_NOT_FOUND = 7022 # The specified session name is already in use. CTX_WINSTATION_ALREADY_EXISTS = 7023 # The requested operation cannot be completed because the terminal connection is currently busy processing a connect, disconnect, reset, or delete operation. CTX_WINSTATION_BUSY = 7024 # An attempt has been made to connect to a session whose video mode is not supported by the current client. CTX_BAD_VIDEO_MODE = 7025 # The application attempted to enable DOS graphics mode. # DOS graphics mode is not supported. CTX_GRAPHICS_INVALID = 7035 # Your interactive logon privilege has been disabled. # Please contact your administrator. CTX_LOGON_DISABLED = 7037 # The requested operation can be performed only on the system console. # This is most often the result of a driver or system DLL requiring direct console access. CTX_NOT_CONSOLE = 7038 # The client failed to respond to the server connect message. CTX_CLIENT_QUERY_TIMEOUT = 7040 # Disconnecting the console session is not supported. CTX_CONSOLE_DISCONNECT = 7041 # Reconnecting a disconnected session to the console is not supported. CTX_CONSOLE_CONNECT = 7042 # The request to control another session remotely was denied. CTX_SHADOW_DENIED = 7044 # The requested session access is denied. CTX_WINSTATION_ACCESS_DENIED = 7045 # The specified terminal connection driver is invalid. CTX_INVALID_WD = 7049 # The requested session cannot be controlled remotely. # This may be because the session is disconnected or does not currently have a user logged on. CTX_SHADOW_INVALID = 7050 # The requested session is not configured to allow remote control. CTX_SHADOW_DISABLED = 7051 # Your request to connect to this Terminal Server has been rejected. Your Terminal Server client license number is currently being used by another user. # Please call your system administrator to obtain a unique license number. CTX_CLIENT_LICENSE_IN_USE = 7052 # Your request to connect to this Terminal Server has been rejected. Your Terminal Server client license number has not been entered for this copy of the Terminal Server client. # Please contact your system administrator. CTX_CLIENT_LICENSE_NOT_SET = 7053 # The system has reached its licensed logon limit. # Please try again later. CTX_LICENSE_NOT_AVAILABLE = 7054 # The client you are using is not licensed to use this system. Your logon request is denied. CTX_LICENSE_CLIENT_INVALID = 7055 # The system license has expired. Your logon request is denied. CTX_LICENSE_EXPIRED = 7056 # Remote control could not be terminated because the specified session is not currently being remotely controlled. CTX_SHADOW_NOT_RUNNING = 7057 # The remote control of the console was terminated because the display mode was changed. Changing the display mode in a remote control session is not supported. CTX_SHADOW_ENDED_BY_MODE_CHANGE = 7058 # No information avialable. ACTIVATION_COUNT_EXCEEDED = 7059 # The file replication service API was called incorrectly. FRS_ERR_INVALID_API_SEQUENCE = 8001 # The file replication service cannot be started. FRS_ERR_STARTING_SERVICE = 8002 # The file replication service cannot be stopped. FRS_ERR_STOPPING_SERVICE = 8003 # The file replication service API terminated the request. # The event log may have more information. FRS_ERR_INTERNAL_API = 8004 # The file replication service terminated the request. # The event log may have more information. FRS_ERR_INTERNAL = 8005 # The file replication service cannot be contacted. # The event log may have more information. FRS_ERR_SERVICE_COMM = 8006 # The file replication service cannot satisfy the request because the user has insufficient privileges. # The event log may have more information. FRS_ERR_INSUFFICIENT_PRIV = 8007 # The file replication service cannot satisfy the request because authenticated RPC is not available. # The event log may have more information. FRS_ERR_AUTHENTICATION = 8008 # The file replication service cannot satisfy the request because the user has insufficient privileges on the domain controller. # The event log may have more information. FRS_ERR_PARENT_INSUFFICIENT_PRIV = 8009 # The file replication service cannot satisfy the request because authenticated RPC is not available on the domain controller. # The event log may have more information. FRS_ERR_PARENT_AUTHENTICATION = 8010 # The file replication service cannot communicate with the file replication service on the domain controller. # The event log may have more information. FRS_ERR_CHILD_TO_PARENT_COMM = 8011 # The file replication service on the domain controller cannot communicate with the file replication service on this computer. # The event log may have more information. FRS_ERR_PARENT_TO_CHILD_COMM = 8012 # The file replication service cannot populate the system volume because of an internal error. # The event log may have more information. FRS_ERR_SYSVOL_POPULATE = 8013 # The file replication service cannot populate the system volume because of an internal timeout. # The event log may have more information. FRS_ERR_SYSVOL_POPULATE_TIMEOUT = 8014 # The file replication service cannot process the request. The system volume is busy with a previous request. FRS_ERR_SYSVOL_IS_BUSY = 8015 # The file replication service cannot stop replicating the system volume because of an internal error. # The event log may have more information. FRS_ERR_SYSVOL_DEMOTE = 8016 # The file replication service detected an invalid parameter. FRS_ERR_INVALID_SERVICE_PARAMETER = 8017 # An error occurred while installing the directory service. For more information, see the event log. DS_NOT_INSTALLED = 8200 # The directory service evaluated group memberships locally. DS_MEMBERSHIP_EVALUATED_LOCALLY = 8201 # The specified directory service attribute or value does not exist. DS_NO_ATTRIBUTE_OR_VALUE = 8202 # The attribute syntax specified to the directory service is invalid. DS_INVALID_ATTRIBUTE_SYNTAX = 8203 # The attribute type specified to the directory service is not defined. DS_ATTRIBUTE_TYPE_UNDEFINED = 8204 # The specified directory service attribute or value already exists. DS_ATTRIBUTE_OR_VALUE_EXISTS = 8205 # The directory service is busy. DS_BUSY = 8206 # The directory service is unavailable. DS_UNAVAILABLE = 8207 # The directory service was unable to allocate a relative identifier. DS_NO_RIDS_ALLOCATED = 8208 # The directory service has exhausted the pool of relative identifiers. DS_NO_MORE_RIDS = 8209 # The requested operation could not be performed because the directory service is not the master for that type of operation. DS_INCORRECT_ROLE_OWNER = 8210 # The directory service was unable to initialize the subsystem that allocates relative identifiers. DS_RIDMGR_INIT_ERROR = 8211 # The requested operation did not satisfy one or more constraints associated with the class of the object. DS_OBJ_CLASS_VIOLATION = 8212 # The directory service can perform the requested operation only on a leaf object. DS_CANT_ON_NON_LEAF = 8213 # The directory service cannot perform the requested operation on the RDN attribute of an object. DS_CANT_ON_RDN = 8214 # The directory service detected an attempt to modify the object class of an object. DS_CANT_MOD_OBJ_CLASS = 8215 # The requested cross-domain move operation could not be performed. DS_CROSS_DOM_MOVE_ERROR = 8216 # Unable to contact the global catalog server. DS_GC_NOT_AVAILABLE = 8217 # The policy object is shared and can only be modified at the root. SHARED_POLICY = 8218 # The policy object does not exist. POLICY_OBJECT_NOT_FOUND = 8219 # The requested policy information is only in the directory service. POLICY_ONLY_IN_DS = 8220 # A domain controller promotion is currently active. PROMOTION_ACTIVE = 8221 # A domain controller promotion is not currently active NO_PROMOTION_ACTIVE = 8222 # An operations error occurred. DS_OPERATIONS_ERROR = 8224 # A protocol error occurred. DS_PROTOCOL_ERROR = 8225 # The time limit for this request was exceeded. DS_TIMELIMIT_EXCEEDED = 8226 # The size limit for this request was exceeded. DS_SIZELIMIT_EXCEEDED = 8227 # The administrative limit for this request was exceeded. DS_ADMIN_LIMIT_EXCEEDED = 8228 # The compare response was false. DS_COMPARE_FALSE = 8229 # The compare response was true. DS_COMPARE_TRUE = 8230 # The requested authentication method is not supported by the server. DS_AUTH_METHOD_NOT_SUPPORTED = 8231 # A more secure authentication method is required for this server. DS_STRONG_AUTH_REQUIRED = 8232 # Inappropriate authentication. DS_INAPPROPRIATE_AUTH = 8233 # The authentication mechanism is unknown. DS_AUTH_UNKNOWN = 8234 # A referral was returned from the server. DS_REFERRAL = 8235 # The server does not support the requested critical extension. DS_UNAVAILABLE_CRIT_EXTENSION = 8236 # This request requires a secure connection. DS_CONFIDENTIALITY_REQUIRED = 8237 # Inappropriate matching. DS_INAPPROPRIATE_MATCHING = 8238 # A constraint violation occurred. DS_CONSTRAINT_VIOLATION = 8239 # There is no such object on the server. DS_NO_SUCH_OBJECT = 8240 # There is an alias problem. DS_ALIAS_PROBLEM = 8241 # An invalid dn syntax has been specified. DS_INVALID_DN_SYNTAX = 8242 # The object is a leaf object. DS_IS_LEAF = 8243 # There is an alias dereferencing problem. DS_ALIAS_DEREF_PROBLEM = 8244 # The server is unwilling to process the request. DS_UNWILLING_TO_PERFORM = 8245 # A loop has been detected. DS_LOOP_DETECT = 8246 # There is a naming violation. DS_NAMING_VIOLATION = 8247 # The result set is too large. DS_OBJECT_RESULTS_TOO_LARGE = 8248 # The operation affects multiple DSAs DS_AFFECTS_MULTIPLE_DSAS = 8249 # The server is not operational. DS_SERVER_DOWN = 8250 # A local error has occurred. DS_LOCAL_ERROR = 8251 # An encoding error has occurred. DS_ENCODING_ERROR = 8252 # A decoding error has occurred. DS_DECODING_ERROR = 8253 # The search filter cannot be recognized. DS_FILTER_UNKNOWN = 8254 # One or more parameters are illegal. DS_PARAM_ERROR = 8255 # The specified method is not supported. DS_NOT_SUPPORTED = 8256 # No results were returned. DS_NO_RESULTS_RETURNED = 8257 # The specified control is not supported by the server. DS_CONTROL_NOT_FOUND = 8258 # A referral loop was detected by the client. DS_CLIENT_LOOP = 8259 # The preset referral limit was exceeded. DS_REFERRAL_LIMIT_EXCEEDED = 8260 # The search requires a SORT control. DS_SORT_CONTROL_MISSING = 8261 # The search results exceed the offset range specified. DS_OFFSET_RANGE_ERROR = 8262 # The root object must be the head of a naming context. The root object cannot have an instantiated parent. DS_ROOT_MUST_BE_NC = 8301 # The add replica operation cannot be performed. The naming context must be writable in order to create the replica. DS_ADD_REPLICA_INHIBITED = 8302 # A reference to an attribute that is not defined in the schema occurred. DS_ATT_NOT_DEF_IN_SCHEMA = 8303 # The maximum size of an object has been exceeded. DS_MAX_OBJ_SIZE_EXCEEDED = 8304 # An attempt was made to add an object to the directory with a name that is already in use. DS_OBJ_STRING_NAME_EXISTS = 8305 # An attempt was made to add an object of a class that does not have an RDN defined in the schema. DS_NO_RDN_DEFINED_IN_SCHEMA = 8306 # An attempt was made to add an object using an RDN that is not the RDN defined in the schema. DS_RDN_DOESNT_MATCH_SCHEMA = 8307 # None of the requested attributes were found on the objects. DS_NO_REQUESTED_ATTS_FOUND = 8308 # The user buffer is too small. DS_USER_BUFFER_TO_SMALL = 8309 # The attribute specified in the operation is not present on the object. DS_ATT_IS_NOT_ON_OBJ = 8310 # Illegal modify operation. Some aspect of the modification is not permitted. DS_ILLEGAL_MOD_OPERATION = 8311 # The specified object is too large. DS_OBJ_TOO_LARGE = 8312 # The specified instance type is not valid. DS_BAD_INSTANCE_TYPE = 8313 # The operation must be performed at a master DSA. DS_MASTERDSA_REQUIRED = 8314 # The object class attribute must be specified. DS_OBJECT_CLASS_REQUIRED = 8315 # A required attribute is missing. DS_MISSING_REQUIRED_ATT = 8316 # An attempt was made to modify an object to include an attribute that is not legal for its class. DS_ATT_NOT_DEF_FOR_CLASS = 8317 # The specified attribute is already present on the object. DS_ATT_ALREADY_EXISTS = 8318 # The specified attribute is not present, or has no values. DS_CANT_ADD_ATT_VALUES = 8320 # Mutliple values were specified for an attribute that can have only one value. DS_SINGLE_VALUE_CONSTRAINT = 8321 # A value for the attribute was not in the acceptable range of values. DS_RANGE_CONSTRAINT = 8322 # The specified value already exists. DS_ATT_VAL_ALREADY_EXISTS = 8323 # The attribute cannot be removed because it is not present on the object. DS_CANT_REM_MISSING_ATT = 8324 # The attribute value cannot be removed because it is not present on the object. DS_CANT_REM_MISSING_ATT_VAL = 8325 # The specified root object cannot be a subref. DS_ROOT_CANT_BE_SUBREF = 8326 # Chaining is not permitted. DS_NO_CHAINING = 8327 # Chained evaluation is not permitted. DS_NO_CHAINED_EVAL = 8328 # The operation could not be performed because the object's parent is either uninstantiated or deleted. DS_NO_PARENT_OBJECT = 8329 # Having a parent that is an alias is not permitted. Aliases are leaf objects. DS_PARENT_IS_AN_ALIAS = 8330 # The object and parent must be of the same type, either both masters or both replicas. DS_CANT_MIX_MASTER_AND_REPS = 8331 # The operation cannot be performed because child objects exist. This operation can only be performed on a leaf object. DS_CHILDREN_EXIST = 8332 # Directory object not found. DS_OBJ_NOT_FOUND = 8333 # The aliased object is missing. DS_ALIASED_OBJ_MISSING = 8334 # The object name has bad syntax. DS_BAD_NAME_SYNTAX = 8335 # It is not permitted for an alias to refer to another alias. DS_ALIAS_POINTS_TO_ALIAS = 8336 # The alias cannot be dereferenced. DS_CANT_DEREF_ALIAS = 8337 # The operation is out of scope. DS_OUT_OF_SCOPE = 8338 # The operation cannot continue because the object is in the process of being removed. DS_OBJECT_BEING_REMOVED = 8339 # The DSA object cannot be deleted. DS_CANT_DELETE_DSA_OBJ = 8340 # A directory service error has occurred. DS_GENERIC_ERROR = 8341 # The operation can only be performed on an internal master DSA object. DS_DSA_MUST_BE_INT_MASTER = 8342 # The object must be of class DSA. DS_CLASS_NOT_DSA = 8343 # Insufficient access rights to perform the operation. DS_INSUFF_ACCESS_RIGHTS = 8344 # The object cannot be added because the parent is not on the list of possible superiors. DS_ILLEGAL_SUPERIOR = 8345 # Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM). DS_ATTRIBUTE_OWNED_BY_SAM = 8346 # The name has too many parts. DS_NAME_TOO_MANY_PARTS = 8347 # The name is too long. DS_NAME_TOO_LONG = 8348 # The name value is too long. DS_NAME_VALUE_TOO_LONG = 8349 # The directory service encountered an error parsing a name. DS_NAME_UNPARSEABLE = 8350 # The directory service cannot get the attribute type for a name. DS_NAME_TYPE_UNKNOWN = 8351 # The name does not identify an object, the name identifies a phantom. DS_NOT_AN_OBJECT = 8352 # The security descriptor is too short. DS_SEC_DESC_TOO_LONG = 8353 # The security descriptor is invalid. DS_SEC_DESC_INVALID = 8354 # Failed to create name for deleted object. DS_NO_DELETED_NAME = 8355 # The parent of a new subref must exist. DS_SUBREF_MUST_HAVE_PARENT = 8356 # The object must be a naming context. DS_NCNAME_MUST_BE_NC = 8357 # It is not permitted to add an attribute which is owned by the system. DS_CANT_ADD_SYSTEM_ONLY = 8358 # The class of the object must be structural, you cannot instantiate an abstract class. DS_CLASS_MUST_BE_CONCRETE = 8359 # The schema object could not be found. DS_INVALID_DMD = 8360 # A local object with this GUID (dead or alive) already exists. DS_OBJ_GUID_EXISTS = 8361 # The operation cannot be performed on a back link. DS_NOT_ON_BACKLINK = 8362 # The cross reference for the specified naming context could not be found. DS_NO_CROSSREF_FOR_NC = 8363 # The operation could not be performed because the directory service is shutting down. DS_SHUTTING_DOWN = 8364 # The directory service request is invalid. DS_UNKNOWN_OPERATION = 8365 # The role owner attribute could not be read. DS_INVALID_ROLE_OWNER = 8366 # The requested FSMO operation failed. The current FSMO holder could not be contacted. DS_COULDNT_CONTACT_FSMO = 8367 # Modification of a DN across a naming context is not permitted. DS_CROSS_NC_DN_RENAME = 8368 # The attribute cannot be modified because it is owned by the system. DS_CANT_MOD_SYSTEM_ONLY = 8369 # Only the replicator can perform this function. DS_REPLICATOR_ONLY = 8370 # The specified class is not defined. DS_OBJ_CLASS_NOT_DEFINED = 8371 # The specified class is not a subclass. DS_OBJ_CLASS_NOT_SUBCLASS = 8372 # The name reference is invalid. DS_NAME_REFERENCE_INVALID = 8373 # A cross reference already exists. DS_CROSS_REF_EXISTS = 8374 # It is not permitted to delete a master cross reference. DS_CANT_DEL_MASTER_CROSSREF = 8375 # Subtree notifications are only supported on NC heads. DS_SUBTREE_NOTIFY_NOT_NC_HEAD = 8376 # Notification filter is too complex. DS_NOTIFY_FILTER_TOO_COMPLEX = 8377 # Schema update failed: duplicate RDN. DS_DUP_RDN = 8378 # Schema update failed: duplicate OID. DS_DUP_OID = 8379 # Schema update failed: duplicate MAPI identifier. DS_DUP_MAPI_ID = 8380 # Schema update failed: duplicate schema-id GUID. DS_DUP_SCHEMA_ID_GUID = 8381 # Schema update failed: duplicate LDAP display name. DS_DUP_LDAP_DISPLAY_NAME = 8382 # Schema update failed: range-lower less than range upper. DS_SEMANTIC_ATT_TEST = 8383 # Schema update failed: syntax mismatch. DS_SYNTAX_MISMATCH = 8384 # Schema deletion failed: attribute is used in must-contain. DS_EXISTS_IN_MUST_HAVE = 8385 # Schema deletion failed: attribute is used in may-contain. DS_EXISTS_IN_MAY_HAVE = 8386 # Schema update failed: attribute in may-contain does not exist. DS_NONEXISTENT_MAY_HAVE = 8387 # Schema update failed: attribute in must-contain does not exist. DS_NONEXISTENT_MUST_HAVE = 8388 # Schema update failed: class in aux-class list does not exist or is not an auxiliary class. DS_AUX_CLS_TEST_FAIL = 8389 # Schema update failed: class in poss-superiors does not exist. DS_NONEXISTENT_POSS_SUP = 8390 # Schema update failed: class in subclassof list does not exist or does not satisfy hierarchy rules. DS_SUB_CLS_TEST_FAIL = 8391 # Schema update failed: Rdn-Att-Id has wrong syntax. DS_BAD_RDN_ATT_ID_SYNTAX = 8392 # Schema deletion failed: class is used as auxiliary class. DS_EXISTS_IN_AUX_CLS = 8393 # Schema deletion failed: class is used as sub class. DS_EXISTS_IN_SUB_CLS = 8394 # Schema deletion failed: class is used as poss superior. DS_EXISTS_IN_POSS_SUP = 8395 # Schema update failed in recalculating validation cache. DS_RECALCSCHEMA_FAILED = 8396 # The tree deletion is not finished. The request must be made again to continue deleting the tree. DS_TREE_DELETE_NOT_FINISHED = 8397 # The requested delete operation could not be performed. DS_CANT_DELETE = 8398 # Cannot read the governs class identifier for the schema record. DS_ATT_SCHEMA_REQ_ID = 8399 # The attribute schema has bad syntax. DS_BAD_ATT_SCHEMA_SYNTAX = 8400 # The attribute could not be cached. DS_CANT_CACHE_ATT = 8401 # The class could not be cached. DS_CANT_CACHE_CLASS = 8402 # The attribute could not be removed from the cache. DS_CANT_REMOVE_ATT_CACHE = 8403 # The class could not be removed from the cache. DS_CANT_REMOVE_CLASS_CACHE = 8404 # The distinguished name attribute could not be read. DS_CANT_RETRIEVE_DN = 8405 # A required subref is missing. DS_MISSING_SUPREF = 8406 # The instance type attribute could not be retrieved. DS_CANT_RETRIEVE_INSTANCE = 8407 # An internal error has occurred. DS_CODE_INCONSISTENCY = 8408 # A database error has occurred. DS_DATABASE_ERROR = 8409 # The attribute GOVERNSID is missing. DS_GOVERNSID_MISSING = 8410 # An expected attribute is missing. DS_MISSING_EXPECTED_ATT = 8411 # The specified naming context is missing a cross reference. DS_NCNAME_MISSING_CR_REF = 8412 # A security checking error has occurred. DS_SECURITY_CHECKING_ERROR = 8413 # The schema is not loaded. DS_SCHEMA_NOT_LOADED = 8414 # Schema allocation failed. Please check if the machine is running low on memory. DS_SCHEMA_ALLOC_FAILED = 8415 # Failed to obtain the required syntax for the attribute schema. DS_ATT_SCHEMA_REQ_SYNTAX = 8416 # The global catalog verification failed. The global catalog is not available or does not support the operation. Some part of the directory is currently not available. DS_GCVERIFY_ERROR = 8417 # The replication operation failed because of a schema mismatch between the servers involved. DS_DRA_SCHEMA_MISMATCH = 8418 # The DSA object could not be found. DS_CANT_FIND_DSA_OBJ = 8419 # The naming context could not be found. DS_CANT_FIND_EXPECTED_NC = 8420 # The naming context could not be found in the cache. DS_CANT_FIND_NC_IN_CACHE = 8421 # The child object could not be retrieved. DS_CANT_RETRIEVE_CHILD = 8422 # The modification was not permitted for security reasons. DS_SECURITY_ILLEGAL_MODIFY = 8423 # The operation cannot replace the hidden record. DS_CANT_REPLACE_HIDDEN_REC = 8424 # The hierarchy file is invalid. DS_BAD_HIERARCHY_FILE = 8425 # The attempt to build the hierarchy table failed. DS_BUILD_HIERARCHY_TABLE_FAILED = 8426 # The directory configuration parameter is missing from the registry. DS_CONFIG_PARAM_MISSING = 8427 # The attempt to count the address book indices failed. DS_COUNTING_AB_INDICES_FAILED = 8428 # The allocation of the hierarchy table failed. DS_HIERARCHY_TABLE_MALLOC_FAILED = 8429 # The directory service encountered an internal failure. DS_INTERNAL_FAILURE = 8430 # The directory service encountered an unknown failure. DS_UNKNOWN_ERROR = 8431 # A root object requires a class of 'top'. DS_ROOT_REQUIRES_CLASS_TOP = 8432 # This directory server is shutting down, and cannot take ownership of new floating single-master operation roles. DS_REFUSING_FSMO_ROLES = 8433 # The directory service is missing mandatory configuration information, and is unable to determine the ownership of floating single-master operation roles. DS_MISSING_FSMO_SETTINGS = 8434 # The directory service was unable to transfer ownership of one or more floating single-master operation roles to other servers. DS_UNABLE_TO_SURRENDER_ROLES = 8435 # The replication operation failed. DS_DRA_GENERIC = 8436 # An invalid parameter was specified for this replication operation. DS_DRA_INVALID_PARAMETER = 8437 # The directory service is too busy to complete the replication operation at this time. DS_DRA_BUSY = 8438 # The distinguished name specified for this replication operation is invalid. DS_DRA_BAD_DN = 8439 # The naming context specified for this replication operation is invalid. DS_DRA_BAD_NC = 8440 # The distinguished name specified for this replication operation already exists. DS_DRA_DN_EXISTS = 8441 # The replication system encountered an internal error. DS_DRA_INTERNAL_ERROR = 8442 # The replication operation encountered a database inconsistency. DS_DRA_INCONSISTENT_DIT = 8443 # The server specified for this replication operation could not be contacted. DS_DRA_CONNECTION_FAILED = 8444 # The replication operation encountered an object with an invalid instance type. DS_DRA_BAD_INSTANCE_TYPE = 8445 # The replication operation failed to allocate memory. DS_DRA_OUT_OF_MEM = 8446 # The replication operation encountered an error with the mail system. DS_DRA_MAIL_PROBLEM = 8447 # The replication reference information for the target server already exists. DS_DRA_REF_ALREADY_EXISTS = 8448 # The replication reference information for the target server does not exist. DS_DRA_REF_NOT_FOUND = 8449 # The naming context cannot be removed because it is replicated to another server. DS_DRA_OBJ_IS_REP_SOURCE = 8450 # The replication operation encountered a database error. DS_DRA_DB_ERROR = 8451 # The naming context is in the process of being removed or is not replicated from the specified server. DS_DRA_NO_REPLICA = 8452 # Replication access was denied. DS_DRA_ACCESS_DENIED = 8453 # The requested operation is not supported by this version of the directory service. DS_DRA_NOT_SUPPORTED = 8454 # The replication remote procedure call was cancelled. DS_DRA_RPC_CANCELLED = 8455 # The source server is currently rejecting replication requests. DS_DRA_SOURCE_DISABLED = 8456 # The destination server is currently rejecting replication requests. DS_DRA_SINK_DISABLED = 8457 # The replication operation failed due to a collision of object names. DS_DRA_NAME_COLLISION = 8458 # The replication source has been reinstalled. DS_DRA_SOURCE_REINSTALLED = 8459 # The replication operation failed because a required parent object is missing. DS_DRA_MISSING_PARENT = 8460 # The replication operation was preempted. DS_DRA_PREEMPTED = 8461 # The replication synchronization attempt was abandoned because of a lack of updates. DS_DRA_ABANDON_SYNC = 8462 # The replication operation was terminated because the system is shutting down. DS_DRA_SHUTDOWN = 8463 # The replication synchronization attempt failed as the destination partial attribute set is not a subset of source partial attribute set. DS_DRA_INCOMPATIBLE_PARTIAL_SET = 8464 # The replication synchronization attempt failed because a master replica attempted to sync from a partial replica. DS_DRA_SOURCE_IS_PARTIAL_REPLICA = 8465 # The server specified for this replication operation was contacted, but that server was unable to contact an additional server needed to complete the operation. DS_DRA_EXTN_CONNECTION_FAILED = 8466 # The version of the Active Directory schema of the source forest is not compatible with the version of Active Directory on this computer. You must upgrade the operating system on a domain controller in the source forest before this computer can be added as a domain controller to that forest. DS_INSTALL_SCHEMA_MISMATCH = 8467 # Schema update failed: An attribute with the same link identifier already exists. DS_DUP_LINK_ID = 8468 # Name translation: Generic processing error. DS_NAME_ERROR_RESOLVING = 8469 # Name translation: Could not find the name or insufficient right to see name. DS_NAME_ERROR_NOT_FOUND = 8470 # Name translation: Input name mapped to more than one output name. DS_NAME_ERROR_NOT_UNIQUE = 8471 # Name translation: Input name found, but not the associated output format. DS_NAME_ERROR_NO_MAPPING = 8472 # Name translation: Unable to resolve completely, only the domain was found. DS_NAME_ERROR_DOMAIN_ONLY = 8473 # Name translation: Unable to perform purely syntactical mapping at the client without going out to the wire. DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING = 8474 # Modification of a constructed att is not allowed. DS_CONSTRUCTED_ATT_MOD = 8475 # The OM-Object-Class specified is incorrect for an attribute with the specified syntax. DS_WRONG_OM_OBJ_CLASS = 8476 # The replication request has been posted, waiting for reply. DS_DRA_REPL_PENDING = 8477 # The requested operation requires a directory service, and none was available. DS_DS_REQUIRED = 8478 # The LDAP display name of the class or attribute contains non-ASCII characters. DS_INVALID_LDAP_DISPLAY_NAME = 8479 # The requested search operation is only supported for base searches. DS_NON_BASE_SEARCH = 8480 # The search failed to retrieve attributes from the database. DS_CANT_RETRIEVE_ATTS = 8481 # The schema update operation tried to add a backward link attribute that has no corresponding forward link. DS_BACKLINK_WITHOUT_LINK = 8482 # Source and destination of a cross-domain move do not agree on the object's epoch number. Either source or destination does not have the latest version of the object. DS_EPOCH_MISMATCH = 8483 # Source and destination of a cross-domain move do not agree on the object's current name. Either source or destination does not have the latest version of the object. DS_SRC_NAME_MISMATCH = 8484 # Source and destination for the cross-domain move operation are identical. Caller should use local move operation instead of cross-domain move operation. DS_SRC_AND_DST_NC_IDENTICAL = 8485 # Source and destination for a cross-domain move are not in agreement on the naming contexts in the forest. Either source or destination does not have the latest version of the Partitions container. DS_DST_NC_MISMATCH = 8486 # Destination of a cross-domain move is not authoritative for the destination naming context. DS_NOT_AUTHORITIVE_FOR_DST_NC = 8487 # Source and destination of a cross-domain move do not agree on the identity of the source object. Either source or destination does not have the latest version of the source object. DS_SRC_GUID_MISMATCH = 8488 # Object being moved across-domains is already known to be deleted by the destination server. The source server does not have the latest version of the source object. DS_CANT_MOVE_DELETED_OBJECT = 8489 # Another operation which requires exclusive access to the PDC FSMO is already in progress. DS_PDC_OPERATION_IN_PROGRESS = 8490 # A cross-domain move operation failed such that two versions of the moved object exist - one each in the source and destination domains. The destination object needs to be removed to restore the system to a consistent state. DS_CROSS_DOMAIN_CLEANUP_REQD = 8491 # This object may not be moved across domain boundaries either because cross-domain moves for this class are disallowed, or the object has some special characteristics, eg: trust account or restricted RID, which prevent its move. DS_ILLEGAL_XDOM_MOVE_OPERATION = 8492 # Can't move objects with memberships across domain boundaries as once moved, this would violate the membership conditions of the account group. Remove the object from any account group memberships and retry. DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS = 8493 # A naming context head must be the immediate child of another naming context head, not of an interior node. DS_NC_MUST_HAVE_NC_PARENT = 8494 # The directory cannot validate the proposed naming context name because it does not hold a replica of the naming context above the proposed naming context. Please ensure that the domain naming master role is held by a server that is configured as a global catalog server, and that the server is up to date with its replication partners. (Applies only to Windows 2000 Domain Naming masters) DS_CR_IMPOSSIBLE_TO_VALIDATE = 8495 # Destination domain must be in native mode. DS_DST_DOMAIN_NOT_NATIVE = 8496 # The operation can not be performed because the server does not have an infrastructure container in the domain of interest. DS_MISSING_INFRASTRUCTURE_CONTAINER = 8497 # Cross-domain move of non-empty account groups is not allowed. DS_CANT_MOVE_ACCOUNT_GROUP = 8498 # Cross-domain move of non-empty resource groups is not allowed. DS_CANT_MOVE_RESOURCE_GROUP = 8499 # The search flags for the attribute are invalid. The ANR bit is valid only on attributes of Unicode or Teletex strings. DS_INVALID_SEARCH_FLAG = 8500 # Tree deletions starting at an object which has an NC head as a descendant are not allowed. DS_NO_TREE_DELETE_ABOVE_NC = 8501 # The directory service failed to lock a tree in preparation for a tree deletion because the tree was in use. DS_COULDNT_LOCK_TREE_FOR_DELETE = 8502 # The directory service failed to identify the list of objects to delete while attempting a tree deletion. DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE = 8503 # Security Accounts Manager initialization failed because of the following error: %1. # Error Status: 0x%2. Click OK to shut down the system and reboot into Directory Services Restore Mode. Check the event log for detailed information. DS_SAM_INIT_FAILURE = 8504 # Only an administrator can modify the membership list of an administrative group. DS_SENSITIVE_GROUP_VIOLATION = 8505 # Cannot change the primary group ID of a domain controller account. DS_CANT_MOD_PRIMARYGROUPID = 8506 # An attempt is made to modify the base schema. DS_ILLEGAL_BASE_SCHEMA_MOD = 8507 # Adding a new mandatory attribute to an existing class, deleting a mandatory attribute from an existing class, or adding an optional attribute to the special class Top that is not a backlink attribute (directly or through inheritance, for example, by adding or deleting an auxiliary class) is not allowed. DS_NONSAFE_SCHEMA_CHANGE = 8508 # Schema update is not allowed on this DC because the DC is not the schema FSMO Role Owner. DS_SCHEMA_UPDATE_DISALLOWED = 8509 # An object of this class cannot be created under the schema container. You can only create attribute-schema and class-schema objects under the schema container. DS_CANT_CREATE_UNDER_SCHEMA = 8510 # The replica/child install failed to get the objectVersion attribute on the schema container on the source DC. Either the attribute is missing on the schema container or the credentials supplied do not have permission to read it. DS_INSTALL_NO_SRC_SCH_VERSION = 8511 # The replica/child install failed to read the objectVersion attribute in the SCHEMA section of the file schema.ini in the system32 directory. DS_INSTALL_NO_SCH_VERSION_IN_INIFILE = 8512 # The specified group type is invalid. DS_INVALID_GROUP_TYPE = 8513 # You cannot nest global groups in a mixed domain if the group is security-enabled. DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN = 8514 # You cannot nest local groups in a mixed domain if the group is security-enabled. DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN = 8515 # A global group cannot have a local group as a member. DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER = 8516 # A global group cannot have a universal group as a member. DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER = 8517 # A universal group cannot have a local group as a member. DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER = 8518 # A global group cannot have a cross-domain member. DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER = 8519 # A local group cannot have another cross domain local group as a member. DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER = 8520 # A group with primary members cannot change to a security-disabled group. DS_HAVE_PRIMARY_MEMBERS = 8521 # The schema cache load failed to convert the string default SD on a class-schema object. DS_STRING_SD_CONVERSION_FAILED = 8522 # Only DSAs configured to be Global Catalog servers should be allowed to hold the Domain Naming Master FSMO role. (Applies only to Windows 2000 servers) DS_NAMING_MASTER_GC = 8523 # The DSA operation is unable to proceed because of a DNS lookup failure. DS_DNS_LOOKUP_FAILURE = 8524 # While processing a change to the DNS Host Name for an object, the Service Principal Name values could not be kept in sync. DS_COULDNT_UPDATE_SPNS = 8525 # The Security Descriptor attribute could not be read. DS_CANT_RETRIEVE_SD = 8526 # The object requested was not found, but an object with that key was found. DS_KEY_NOT_UNIQUE = 8527 # The syntax of the linked attribute being added is incorrect. Forward links can only have syntax 2.5.5.1, 2.5.5.7, and 2.5.5.14, and backlinks can only have syntax 2.5.5.1 DS_WRONG_LINKED_ATT_SYNTAX = 8528 # Security Account Manager needs to get the boot password. DS_SAM_NEED_BOOTKEY_PASSWORD = 8529 # Security Account Manager needs to get the boot key from floppy disk. DS_SAM_NEED_BOOTKEY_FLOPPY = 8530 # Directory Service cannot start. DS_CANT_START = 8531 # Directory Services could not start. DS_INIT_FAILURE = 8532 # The connection between client and server requires packet privacy or better. DS_NO_PKT_PRIVACY_ON_CONNECTION = 8533 # The source domain may not be in the same forest as destination. DS_SOURCE_DOMAIN_IN_FOREST = 8534 # The destination domain must be in the forest. DS_DESTINATION_DOMAIN_NOT_IN_FOREST = 8535 # The operation requires that destination domain auditing be enabled. DS_DESTINATION_AUDITING_NOT_ENABLED = 8536 # The operation couldn't locate a DC for the source domain. DS_CANT_FIND_DC_FOR_SRC_DOMAIN = 8537 # The source object must be a group or user. DS_SRC_OBJ_NOT_GROUP_OR_USER = 8538 # The source object's SID already exists in destination forest. DS_SRC_SID_EXISTS_IN_FOREST = 8539 # The source and destination object must be of the same type. DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH = 8540 # Security Accounts Manager initialization failed because of the following error: %1. # Error Status: 0x%2. Click OK to shut down the system and reboot into Safe Mode. Check the event log for detailed information. SAM_INIT_FAILURE = 8541 # Schema information could not be included in the replication request. DS_DRA_SCHEMA_INFO_SHIP = 8542 # The replication operation could not be completed due to a schema incompatibility. DS_DRA_SCHEMA_CONFLICT = 8543 # The replication operation could not be completed due to a previous schema incompatibility. DS_DRA_EARLIER_SCHEMA_CONFLICT = 8544 # The replication update could not be applied because either the source or the destination has not yet received information regarding a recent cross-domain move operation. DS_DRA_OBJ_NC_MISMATCH = 8545 # The requested domain could not be deleted because there exist domain controllers that still host this domain. DS_NC_STILL_HAS_DSAS = 8546 # The requested operation can be performed only on a global catalog server. DS_GC_REQUIRED = 8547 # A local group can only be a member of other local groups in the same domain. DS_LOCAL_MEMBER_OF_LOCAL_ONLY = 8548 # Foreign security principals cannot be members of universal groups. DS_NO_FPO_IN_UNIVERSAL_GROUPS = 8549 # The attribute is not allowed to be replicated to the GC because of security reasons. DS_CANT_ADD_TO_GC = 8550 # The checkpoint with the PDC could not be taken because there too many modifications being processed currently. DS_NO_CHECKPOINT_WITH_PDC = 8551 # The operation requires that source domain auditing be enabled. DS_SOURCE_AUDITING_NOT_ENABLED = 8552 # Security principal objects can only be created inside domain naming contexts. DS_CANT_CREATE_IN_NONDOMAIN_NC = 8553 # A Service Principal Name (SPN) could not be constructed because the provided hostname is not in the necessary format. DS_INVALID_NAME_FOR_SPN = 8554 # A Filter was passed that uses constructed attributes. DS_FILTER_USES_CONTRUCTED_ATTRS = 8555 # The unicodePwd attribute value must be enclosed in double quotes. DS_UNICODEPWD_NOT_IN_QUOTES = 8556 # Your computer could not be joined to the domain. You have exceeded the maximum number of computer accounts you are allowed to create in this domain. Contact your system administrator to have this limit reset or increased. DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED = 8557 # For security reasons, the operation must be run on the destination DC. DS_MUST_BE_RUN_ON_DST_DC = 8558 # For security reasons, the source DC must be NT4SP4 or greater. DS_SRC_DC_MUST_BE_SP4_OR_GREATER = 8559 # Critical Directory Service System objects cannot be deleted during tree delete operations. The tree delete may have been partially performed. DS_CANT_TREE_DELETE_CRITICAL_OBJ = 8560 # Directory Services could not start because of the following error: %1. # Error Status: 0x%2. Please click OK to shutdown the system. You can use the recovery console to diagnose the system further. DS_INIT_FAILURE_CONSOLE = 8561 # Security Accounts Manager initialization failed because of the following error: %1. # Error Status: 0x%2. Please click OK to shutdown the system. You can use the recovery console to diagnose the system further. DS_SAM_INIT_FAILURE_CONSOLE = 8562 # This version of Windows is too old to support the current directory forest behavior. You must upgrade the operating system on this server before it can become a domain controller in this forest. DS_FOREST_VERSION_TOO_HIGH = 8563 # This version of Windows is too old to support the current domain behavior. You must upgrade the operating system on this server before it can become a domain controller in this domain. DS_DOMAIN_VERSION_TOO_HIGH = 8564 # This version of Windows no longer supports the behavior version in use in this directory forest. You must advance the forest behavior version before this server can become a domain controller in the forest. DS_FOREST_VERSION_TOO_LOW = 8565 # This version of Windows no longer supports the behavior version in use in this domain. You must advance the domain behavior version before this server can become a domain controller in the domain. DS_DOMAIN_VERSION_TOO_LOW = 8566 # The version of Windows is incompatible with the behavior version of the domain or forest. DS_INCOMPATIBLE_VERSION = 8567 # The behavior version cannot be increased to the requested value because Domain Controllers still exist with versions lower than the requested value. DS_LOW_DSA_VERSION = 8568 # The behavior version value cannot be increased while the domain is still in mixed domain mode. You must first change the domain to native mode before increasing the behavior version. DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN = 8569 # The sort order requested is not supported. DS_NOT_SUPPORTED_SORT_ORDER = 8570 # Found an object with a non unique name. DS_NAME_NOT_UNIQUE = 8571 # The machine account was created pre-NT4. The account needs to be recreated. DS_MACHINE_ACCOUNT_CREATED_PRENT4 = 8572 # The database is out of version store. DS_OUT_OF_VERSION_STORE = 8573 # Unable to continue operation because multiple conflicting controls were used. DS_INCOMPATIBLE_CONTROLS_USED = 8574 # Unable to find a valid security descriptor reference domain for this partition. DS_NO_REF_DOMAIN = 8575 # Schema update failed: The link identifier is reserved. DS_RESERVED_LINK_ID = 8576 # Schema update failed: There are no link identifiers available. DS_LINK_ID_NOT_AVAILABLE = 8577 # A account group can not have a universal group as a member. DS_AG_CANT_HAVE_UNIVERSAL_MEMBER = 8578 # Rename or move operations on naming context heads or read-only objects are not allowed. DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE = 8579 # Move operations on objects in the schema naming context are not allowed. DS_NO_OBJECT_MOVE_IN_SCHEMA_NC = 8580 # A system flag has been set on the object and does not allow the object to be moved or renamed. DS_MODIFYDN_DISALLOWED_BY_FLAG = 8581 # This object is not allowed to change its grandparent container. Moves are not forbidden on this object, but are restricted to sibling containers. DS_MODIFYDN_WRONG_GRANDPARENT = 8582 # Unable to resolve completely, a referral to another forest is generated. DS_NAME_ERROR_TRUST_REFERRAL = 8583 # The requested action is not supported on standard server. NOT_SUPPORTED_ON_STANDARD_SERVER = 8584 # Could not access a partition of the Active Directory located on a remote server. Make sure at least one server is running for the partition in question. DS_CANT_ACCESS_REMOTE_PART_OF_AD = 8585 # The directory cannot validate the proposed naming context (or partition) name because it does not hold a replica nor can it contact a replica of the naming context above the proposed naming context. Please ensure that the parent naming context is properly registered in DNS, and at least one replica of this naming context is reachable by the Domain Naming master. DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 = 8586 # The thread limit for this request was exceeded. DS_THREAD_LIMIT_EXCEEDED = 8587 # The Global catalog server is not in the closest site. DS_NOT_CLOSEST = 8588 # The DS cannot derive a service principal name (SPN) with which to mutually authenticate the target server because the corresponding server object in the local DS database has no serverReference attribute. DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF = 8589 # The Directory Service failed to enter single user mode. DS_SINGLE_USER_MODE_FAILED = 8590 # The Directory Service cannot parse the script because of a syntax error. DS_NTDSCRIPT_SYNTAX_ERROR = 8591 # The Directory Service cannot process the script because of an error. DS_NTDSCRIPT_PROCESS_ERROR = 8592 # The directory service cannot perform the requested operation because the servers # involved are of different replication epochs (which is usually related to a # domain rename that is in progress). DS_DIFFERENT_REPL_EPOCHS = 8593 # The directory service binding must be renegotiated due to a change in the server # extensions information. DS_DRS_EXTENSIONS_CHANGED = 8594 # Operation not allowed on a disabled cross ref. DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR = 8595 # Schema update failed: No values for msDS-IntId are available. DS_NO_MSDS_INTID = 8596 # Schema update failed: Duplicate msDS-INtId. Retry the operation. DS_DUP_MSDS_INTID = 8597 # Schema deletion failed: attribute is used in rDNAttID. DS_EXISTS_IN_RDNATTID = 8598 # The directory service failed to authorize the request. DS_AUTHORIZATION_FAILED = 8599 # The Directory Service cannot process the script because it is invalid. DS_INVALID_SCRIPT = 8600 # The remote create cross reference operation failed on the Domain Naming Master FSMO. The operation's error is in the extended data. DS_REMOTE_CROSSREF_OP_FAILED = 8601 # No information avialable. DS_CROSS_REF_BUSY = 8602 # No information avialable. DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN = 8603 # No information avialable. DS_CANT_DEMOTE_WITH_WRITEABLE_NC = 8604 # No information avialable. DS_DUPLICATE_ID_FOUND = 8605 # No information avialable. DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT = 8606 # No information avialable. DS_GROUP_CONVERSION_ERROR = 8607 # No information avialable. DS_CANT_MOVE_APP_BASIC_GROUP = 8608 # No information avialable. DS_CANT_MOVE_APP_QUERY_GROUP = 8609 # No information avialable. DS_ROLE_NOT_VERIFIED = 8610 # No information avialable. DS_WKO_CONTAINER_CANNOT_BE_SPECIAL = 8611 # No information avialable. DS_DOMAIN_RENAME_IN_PROGRESS = 8612 # No information avialable. DS_EXISTING_AD_CHILD_NC = 8613 # No information avialable. DS_REPL_LIFETIME_EXCEEDED = 8614 # No information avialable. DS_DISALLOWED_IN_SYSTEM_CONTAINER = 8615 # No information avialable. DS_LDAP_SEND_QUEUE_FULL = 8616 # No information avialable. DNS_ERROR_RESPONSE_CODES_BASE = 9000 # DNS server unable to interpret format. DNS_ERROR_RCODE_FORMAT_ERROR = 9001 # DNS server failure. DNS_ERROR_RCODE_SERVER_FAILURE = 9002 # DNS name does not exist. DNS_ERROR_RCODE_NAME_ERROR = 9003 # DNS request not supported by name server. DNS_ERROR_RCODE_NOT_IMPLEMENTED = 9004 # DNS operation refused. DNS_ERROR_RCODE_REFUSED = 9005 # DNS name that ought not exist, does exist. DNS_ERROR_RCODE_YXDOMAIN = 9006 # DNS RR set that ought not exist, does exist. DNS_ERROR_RCODE_YXRRSET = 9007 # DNS RR set that ought to exist, does not exist. DNS_ERROR_RCODE_NXRRSET = 9008 # DNS server not authoritative for zone. DNS_ERROR_RCODE_NOTAUTH = 9009 # DNS name in update or prereq is not in zone. DNS_ERROR_RCODE_NOTZONE = 9010 # DNS signature failed to verify. DNS_ERROR_RCODE_BADSIG = 9016 # DNS bad key. DNS_ERROR_RCODE_BADKEY = 9017 # DNS signature validity expired. DNS_ERROR_RCODE_BADTIME = 9018 # No information avialable. DNS_ERROR_PACKET_FMT_BASE = 9500 # No records found for given DNS query. DNS_INFO_NO_RECORDS = 9501 # Bad DNS packet. DNS_ERROR_BAD_PACKET = 9502 # No DNS packet. DNS_ERROR_NO_PACKET = 9503 # DNS error, check rcode. DNS_ERROR_RCODE = 9504 # Unsecured DNS packet. DNS_ERROR_UNSECURE_PACKET = 9505 # No information avialable. DNS_ERROR_GENERAL_API_BASE = 9550 # Invalid DNS type. DNS_ERROR_INVALID_TYPE = 9551 # Invalid IP address. DNS_ERROR_INVALID_IP_ADDRESS = 9552 # Invalid property. DNS_ERROR_INVALID_PROPERTY = 9553 # Try DNS operation again later. DNS_ERROR_TRY_AGAIN_LATER = 9554 # Record for given name and type is not unique. DNS_ERROR_NOT_UNIQUE = 9555 # DNS name does not comply with RFC specifications. DNS_ERROR_NON_RFC_NAME = 9556 # DNS name is a fully-qualified DNS name. DNS_STATUS_FQDN = 9557 # DNS name is dotted (multi-label). DNS_STATUS_DOTTED_NAME = 9558 # DNS name is a single-part name. DNS_STATUS_SINGLE_PART_NAME = 9559 # DNS name contains an invalid character. DNS_ERROR_INVALID_NAME_CHAR = 9560 # DNS name is entirely numeric. DNS_ERROR_NUMERIC_NAME = 9561 # The operation requested is not permitted on a DNS root server. DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER = 9562 # No information avialable. DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION = 9563 # No information avialable. DNS_ERROR_CANNOT_FIND_ROOT_HINTS = 9564 # No information avialable. DNS_ERROR_INCONSISTENT_ROOT_HINTS = 9565 # No information avialable. DNS_ERROR_ZONE_BASE = 9600 # DNS zone does not exist. DNS_ERROR_ZONE_DOES_NOT_EXIST = 9601 # DNS zone information not available. DNS_ERROR_NO_ZONE_INFO = 9602 # Invalid operation for DNS zone. DNS_ERROR_INVALID_ZONE_OPERATION = 9603 # Invalid DNS zone configuration. DNS_ERROR_ZONE_CONFIGURATION_ERROR = 9604 # DNS zone has no start of authority (SOA) record. DNS_ERROR_ZONE_HAS_NO_SOA_RECORD = 9605 # DNS zone has no Name Server (NS) record. DNS_ERROR_ZONE_HAS_NO_NS_RECORDS = 9606 # DNS zone is locked. DNS_ERROR_ZONE_LOCKED = 9607 # DNS zone creation failed. DNS_ERROR_ZONE_CREATION_FAILED = 9608 # DNS zone already exists. DNS_ERROR_ZONE_ALREADY_EXISTS = 9609 # DNS automatic zone already exists. DNS_ERROR_AUTOZONE_ALREADY_EXISTS = 9610 # Invalid DNS zone type. DNS_ERROR_INVALID_ZONE_TYPE = 9611 # Secondary DNS zone requires master IP address. DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP = 9612 # DNS zone not secondary. DNS_ERROR_ZONE_NOT_SECONDARY = 9613 # Need secondary IP address. DNS_ERROR_NEED_SECONDARY_ADDRESSES = 9614 # WINS initialization failed. DNS_ERROR_WINS_INIT_FAILED = 9615 # Need WINS servers. DNS_ERROR_NEED_WINS_SERVERS = 9616 # NBTSTAT initialization call failed. DNS_ERROR_NBSTAT_INIT_FAILED = 9617 # Invalid delete of start of authority (SOA) DNS_ERROR_SOA_DELETE_INVALID = 9618 # A conditional forwarding zone already exists for that name. DNS_ERROR_FORWARDER_ALREADY_EXISTS = 9619 # This zone must be configured with one or more master DNS server IP addresses. DNS_ERROR_ZONE_REQUIRES_MASTER_IP = 9620 # The operation cannot be performed because this zone is shutdown. DNS_ERROR_ZONE_IS_SHUTDOWN = 9621 # No information avialable. DNS_ERROR_DATAFILE_BASE = 9650 # Primary DNS zone requires datafile. DNS_ERROR_PRIMARY_REQUIRES_DATAFILE = 9651 # Invalid datafile name for DNS zone. DNS_ERROR_INVALID_DATAFILE_NAME = 9652 # Failed to open datafile for DNS zone. DNS_ERROR_DATAFILE_OPEN_FAILURE = 9653 # Failed to write datafile for DNS zone. DNS_ERROR_FILE_WRITEBACK_FAILED = 9654 # Failure while reading datafile for DNS zone. DNS_ERROR_DATAFILE_PARSING = 9655 # No information avialable. DNS_ERROR_DATABASE_BASE = 9700 # DNS record does not exist. DNS_ERROR_RECORD_DOES_NOT_EXIST = 9701 # DNS record format error. DNS_ERROR_RECORD_FORMAT = 9702 # Node creation failure in DNS. DNS_ERROR_NODE_CREATION_FAILED = 9703 # Unknown DNS record type. DNS_ERROR_UNKNOWN_RECORD_TYPE = 9704 # DNS record timed out. DNS_ERROR_RECORD_TIMED_OUT = 9705 # Name not in DNS zone. DNS_ERROR_NAME_NOT_IN_ZONE = 9706 # CNAME loop detected. DNS_ERROR_CNAME_LOOP = 9707 # Node is a CNAME DNS record. DNS_ERROR_NODE_IS_CNAME = 9708 # A CNAME record already exists for given name. DNS_ERROR_CNAME_COLLISION = 9709 # Record only at DNS zone root. DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT = 9710 # DNS record already exists. DNS_ERROR_RECORD_ALREADY_EXISTS = 9711 # Secondary DNS zone data error. DNS_ERROR_SECONDARY_DATA = 9712 # Could not create DNS cache data. DNS_ERROR_NO_CREATE_CACHE_DATA = 9713 # DNS name does not exist. DNS_ERROR_NAME_DOES_NOT_EXIST = 9714 # Could not create pointer (PTR) record. DNS_WARNING_PTR_CREATE_FAILED = 9715 # DNS domain was undeleted. DNS_WARNING_DOMAIN_UNDELETED = 9716 # The directory service is unavailable. DNS_ERROR_DS_UNAVAILABLE = 9717 # DNS zone already exists in the directory service. DNS_ERROR_DS_ZONE_ALREADY_EXISTS = 9718 # DNS server not creating or reading the boot file for the directory service integrated DNS zone. DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE = 9719 # No information avialable. DNS_ERROR_OPERATION_BASE = 9750 # DNS AXFR (zone transfer) complete. DNS_INFO_AXFR_COMPLETE = 9751 # DNS zone transfer failed. DNS_ERROR_AXFR = 9752 # Added local WINS server. DNS_INFO_ADDED_LOCAL_WINS = 9753 # No information avialable. DNS_ERROR_SECURE_BASE = 9800 # Secure update call needs to continue update request. DNS_STATUS_CONTINUE_NEEDED = 9801 # No information avialable. DNS_ERROR_SETUP_BASE = 9850 # TCP/IP network protocol not installed. DNS_ERROR_NO_TCPIP = 9851 # No DNS servers configured for local system. DNS_ERROR_NO_DNS_SERVERS = 9852 # No information avialable. DNS_ERROR_DP_BASE = 9900 # The specified directory partition does not exist. DNS_ERROR_DP_DOES_NOT_EXIST = 9901 # The specified directory partition already exists. DNS_ERROR_DP_ALREADY_EXISTS = 9902 # The DS is not enlisted in the specified directory partition. DNS_ERROR_DP_NOT_ENLISTED = 9903 # The DS is already enlisted in the specified directory partition. DNS_ERROR_DP_ALREADY_ENLISTED = 9904 # No information avialable. DNS_ERROR_DP_NOT_AVAILABLE = 9905 # No information avialable. WSABASEERR = 10000 # A blocking operation was interrupted by a call to WSACancelBlockingCall. WSAEINTR = 10004 # The file handle supplied is not valid. WSAEBADF = 10009 # An attempt was made to access a socket in a way forbidden by its access permissions. WSAEACCES = 10013 # The system detected an invalid pointer address in attempting to use a pointer argument in a call. WSAEFAULT = 10014 # An invalid argument was supplied. WSAEINVAL = 10022 # Too many open sockets. WSAEMFILE = 10024 # A non-blocking socket operation could not be completed immediately. WSAEWOULDBLOCK = 10035 # A blocking operation is currently executing. WSAEINPROGRESS = 10036 # An operation was attempted on a non-blocking socket that already had an operation in progress. WSAEALREADY = 10037 # An operation was attempted on something that is not a socket. WSAENOTSOCK = 10038 # A required address was omitted from an operation on a socket. WSAEDESTADDRREQ = 10039 # A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself. WSAEMSGSIZE = 10040 # A protocol was specified in the socket function call that does not support the semantics of the socket type requested. WSAEPROTOTYPE = 10041 # An unknown, invalid, or unsupported option or level was specified in a getsockopt or setsockopt call. WSAENOPROTOOPT = 10042 # The requested protocol has not been configured into the system, or no implementation for it exists. WSAEPROTONOSUPPORT = 10043 # The support for the specified socket type does not exist in this address family. WSAESOCKTNOSUPPORT = 10044 # The attempted operation is not supported for the type of object referenced. WSAEOPNOTSUPP = 10045 # The protocol family has not been configured into the system or no implementation for it exists. WSAEPFNOSUPPORT = 10046 # An address incompatible with the requested protocol was used. WSAEAFNOSUPPORT = 10047 # Only one usage of each socket address (protocol/network address/port) is normally permitted. WSAEADDRINUSE = 10048 # The requested address is not valid in its context. WSAEADDRNOTAVAIL = 10049 # A socket operation encountered a dead network. WSAENETDOWN = 10050 # A socket operation was attempted to an unreachable network. WSAENETUNREACH = 10051 # The connection has been broken due to keep-alive activity detecting a failure while the operation was in progress. WSAENETRESET = 10052 # An established connection was aborted by the software in your host machine. WSAECONNABORTED = 10053 # An existing connection was forcibly closed by the remote host. WSAECONNRESET = 10054 # An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full. WSAENOBUFS = 10055 # A connect request was made on an already connected socket. WSAEISCONN = 10056 # A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied. WSAENOTCONN = 10057 # A request to send or receive data was disallowed because the socket had already been shut down in that direction with a previous shutdown call. WSAESHUTDOWN = 10058 # Too many references to some kernel object. WSAETOOMANYREFS = 10059 # A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. WSAETIMEDOUT = 10060 # No connection could be made because the target machine actively refused it. WSAECONNREFUSED = 10061 # Cannot translate name. WSAELOOP = 10062 # Name component or name was too long. WSAENAMETOOLONG = 10063 # A socket operation failed because the destination host was down. WSAEHOSTDOWN = 10064 # A socket operation was attempted to an unreachable host. WSAEHOSTUNREACH = 10065 # Cannot remove a directory that is not empty. WSAENOTEMPTY = 10066 # A Windows Sockets implementation may have a limit on the number of applications that may use it simultaneously. WSAEPROCLIM = 10067 # Ran out of quota. WSAEUSERS = 10068 # Ran out of disk quota. WSAEDQUOT = 10069 # File handle reference is no longer available. WSAESTALE = 10070 # Item is not available locally. WSAEREMOTE = 10071 # WSAStartup cannot function at this time because the underlying system it uses to provide network services is currently unavailable. WSASYSNOTREADY = 10091 # The Windows Sockets version requested is not supported. WSAVERNOTSUPPORTED = 10092 # Either the application has not called WSAStartup, or WSAStartup failed. WSANOTINITIALISED = 10093 # Returned by WSARecv or WSARecvFrom to indicate the remote party has initiated a graceful shutdown sequence. WSAEDISCON = 10101 # No more results can be returned by WSALookupServiceNext. WSAENOMORE = 10102 # A call to WSALookupServiceEnd was made while this call was still processing. The call has been canceled. WSAECANCELLED = 10103 # The procedure call table is invalid. WSAEINVALIDPROCTABLE = 10104 # The requested service provider is invalid. WSAEINVALIDPROVIDER = 10105 # The requested service provider could not be loaded or initialized. WSAEPROVIDERFAILEDINIT = 10106 # A system call that should never fail has failed. WSASYSCALLFAILURE = 10107 # No such service is known. The service cannot be found in the specified name space. WSASERVICE_NOT_FOUND = 10108 # The specified class was not found. WSATYPE_NOT_FOUND = 10109 # No more results can be returned by WSALookupServiceNext. WSA_E_NO_MORE = 10110 # A call to WSALookupServiceEnd was made while this call was still processing. The call has been canceled. WSA_E_CANCELLED = 10111 # A database query failed because it was actively refused. WSAEREFUSED = 10112 # No such host is known. WSAHOST_NOT_FOUND = 11001 # This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server. WSATRY_AGAIN = 11002 # A non-recoverable error occurred during a database lookup. WSANO_RECOVERY = 11003 # The requested name is valid and was found in the database, but it does not have the correct associated data being resolved for. WSANO_DATA = 11004 # At least one reserve has arrived. WSA_QOS_RECEIVERS = 11005 # At least one path has arrived. WSA_QOS_SENDERS = 11006 # There are no senders. WSA_QOS_NO_SENDERS = 11007 # There are no receivers. WSA_QOS_NO_RECEIVERS = 11008 # Reserve has been confirmed. WSA_QOS_REQUEST_CONFIRMED = 11009 # Error due to lack of resources. WSA_QOS_ADMISSION_FAILURE = 11010 # Rejected for administrative reasons - bad credentials. WSA_QOS_POLICY_FAILURE = 11011 # Unknown or conflicting style. WSA_QOS_BAD_STYLE = 11012 # Problem with some part of the filterspec or providerspecific buffer in general. WSA_QOS_BAD_OBJECT = 11013 # Problem with some part of the flowspec. WSA_QOS_TRAFFIC_CTRL_ERROR = 11014 # General QOS error. WSA_QOS_GENERIC_ERROR = 11015 # An invalid or unrecognized service type was found in the flowspec. WSA_QOS_ESERVICETYPE = 11016 # An invalid or inconsistent flowspec was found in the QOS structure. WSA_QOS_EFLOWSPEC = 11017 # Invalid QOS provider-specific buffer. WSA_QOS_EPROVSPECBUF = 11018 # An invalid QOS filter style was used. WSA_QOS_EFILTERSTYLE = 11019 # An invalid QOS filter type was used. WSA_QOS_EFILTERTYPE = 11020 # An incorrect number of QOS FILTERSPECs were specified in the FLOWDESCRIPTOR. WSA_QOS_EFILTERCOUNT = 11021 # An object with an invalid ObjectLength field was specified in the QOS provider-specific buffer. WSA_QOS_EOBJLENGTH = 11022 # An incorrect number of flow descriptors was specified in the QOS structure. WSA_QOS_EFLOWCOUNT = 11023 # An unrecognized object was found in the QOS provider-specific buffer. WSA_QOS_EUNKOWNPSOBJ = 11024 # An invalid policy object was found in the QOS provider-specific buffer. WSA_QOS_EPOLICYOBJ = 11025 # An invalid QOS flow descriptor was found in the flow descriptor list. WSA_QOS_EFLOWDESC = 11026 # An invalid or inconsistent flowspec was found in the QOS provider specific buffer. WSA_QOS_EPSFLOWSPEC = 11027 # An invalid FILTERSPEC was found in the QOS provider-specific buffer. WSA_QOS_EPSFILTERSPEC = 11028 # An invalid shape discard mode object was found in the QOS provider specific buffer. WSA_QOS_ESDMODEOBJ = 11029 # An invalid shaping rate object was found in the QOS provider-specific buffer. WSA_QOS_ESHAPERATEOBJ = 11030 # A reserved policy element was found in the QOS provider-specific buffer. WSA_QOS_RESERVED_PETYPE = 11031 # The requested section was not present in the activation context. SXS_SECTION_NOT_FOUND = 14000 # This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem. SXS_CANT_GEN_ACTCTX = 14001 # The application binding data format is invalid. SXS_INVALID_ACTCTXDATA_FORMAT = 14002 # The referenced assembly is not installed on your system. SXS_ASSEMBLY_NOT_FOUND = 14003 # The manifest file does not begin with the required tag and format information. SXS_MANIFEST_FORMAT_ERROR = 14004 # The manifest file contains one or more syntax errors. SXS_MANIFEST_PARSE_ERROR = 14005 # The application attempted to activate a disabled activation context. SXS_ACTIVATION_CONTEXT_DISABLED = 14006 # The requested lookup key was not found in any active activation context. SXS_KEY_NOT_FOUND = 14007 # A component version required by the application conflicts with another component version already active. SXS_VERSION_CONFLICT = 14008 # The type requested activation context section does not match the query API used. SXS_WRONG_SECTION_TYPE = 14009 # Lack of system resources has required isolated activation to be disabled for the current thread of execution. SXS_THREAD_QUERIES_DISABLED = 14010 # An attempt to set the process default activation context failed because the process default activation context was already set. SXS_PROCESS_DEFAULT_ALREADY_SET = 14011 # The encoding group identifier specified is not recognized. SXS_UNKNOWN_ENCODING_GROUP = 14012 # The encoding requested is not recognized. SXS_UNKNOWN_ENCODING = 14013 # The manifest contains a reference to an invalid URI. SXS_INVALID_XML_NAMESPACE_URI = 14014 # The application manifest contains a reference to a dependent assembly which is not installed SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED = 14015 # The manifest for an assembly used by the application has a reference to a dependent assembly which is not installed SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED = 14016 # The manifest contains an attribute for the assembly identity which is not valid. SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE = 14017 # The manifest is missing the required default namespace specification on the assembly element. SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE = 14018 # The manifest has a default namespace specified on the assembly element but its value is not "urn:schemas-microsoft-com:asm.v1". SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE = 14019 # The private manifest probed has crossed reparse-point-associated path SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT = 14020 # Two or more components referenced directly or indirectly by the application manifest have files by the same name. SXS_DUPLICATE_DLL_NAME = 14021 # Two or more components referenced directly or indirectly by the application manifest have window classes with the same name. SXS_DUPLICATE_WINDOWCLASS_NAME = 14022 # Two or more components referenced directly or indirectly by the application manifest have the same COM server CLSIDs. SXS_DUPLICATE_CLSID = 14023 # Two or more components referenced directly or indirectly by the application manifest have proxies for the same COM interface IIDs. SXS_DUPLICATE_IID = 14024 # Two or more components referenced directly or indirectly by the application manifest have the same COM type library TLBIDs. SXS_DUPLICATE_TLBID = 14025 # Two or more components referenced directly or indirectly by the application manifest have the same COM ProgIDs. SXS_DUPLICATE_PROGID = 14026 # Two or more components referenced directly or indirectly by the application manifest are different versions of the same component which is not permitted. SXS_DUPLICATE_ASSEMBLY_NAME = 14027 # A component's file does not match the verification information present in the # component manifest. SXS_FILE_HASH_MISMATCH = 14028 # The policy manifest contains one or more syntax errors. SXS_POLICY_PARSE_ERROR = 14029 # Manifest Parse Error : A string literal was expected, but no opening quote character was found. SXS_XML_E_MISSINGQUOTE = 14030 # Manifest Parse Error : Incorrect syntax was used in a comment. SXS_XML_E_COMMENTSYNTAX = 14031 # Manifest Parse Error : A name was started with an invalid character. SXS_XML_E_BADSTARTNAMECHAR = 14032 # Manifest Parse Error : A name contained an invalid character. SXS_XML_E_BADNAMECHAR = 14033 # Manifest Parse Error : A string literal contained an invalid character. SXS_XML_E_BADCHARINSTRING = 14034 # Manifest Parse Error : Invalid syntax for an xml declaration. SXS_XML_E_XMLDECLSYNTAX = 14035 # Manifest Parse Error : An Invalid character was found in text content. SXS_XML_E_BADCHARDATA = 14036 # Manifest Parse Error : Required white space was missing. SXS_XML_E_MISSINGWHITESPACE = 14037 # Manifest Parse Error : The character '>' was expected. SXS_XML_E_EXPECTINGTAGEND = 14038 # Manifest Parse Error : A semi colon character was expected. SXS_XML_E_MISSINGSEMICOLON = 14039 # Manifest Parse Error : Unbalanced parentheses. SXS_XML_E_UNBALANCEDPAREN = 14040 # Manifest Parse Error : Internal error. SXS_XML_E_INTERNALERROR = 14041 # Manifest Parse Error : Whitespace is not allowed at this location. SXS_XML_E_UNEXPECTED_WHITESPACE = 14042 # Manifest Parse Error : End of file reached in invalid state for current encoding. SXS_XML_E_INCOMPLETE_ENCODING = 14043 # Manifest Parse Error : Missing parenthesis. SXS_XML_E_MISSING_PAREN = 14044 # Manifest Parse Error : A single or double closing quote character (\' or \") is missing. SXS_XML_E_EXPECTINGCLOSEQUOTE = 14045 # Manifest Parse Error : Multiple colons are not allowed in a name. SXS_XML_E_MULTIPLE_COLONS = 14046 # Manifest Parse Error : Invalid character for decimal digit. SXS_XML_E_INVALID_DECIMAL = 14047 # Manifest Parse Error : Invalid character for hexidecimal digit. SXS_XML_E_INVALID_HEXIDECIMAL = 14048 # Manifest Parse Error : Invalid unicode character value for this platform. SXS_XML_E_INVALID_UNICODE = 14049 # Manifest Parse Error : Expecting whitespace or '?'. SXS_XML_E_WHITESPACEORQUESTIONMARK = 14050 # Manifest Parse Error : End tag was not expected at this location. SXS_XML_E_UNEXPECTEDENDTAG = 14051 # Manifest Parse Error : The following tags were not closed: %1. SXS_XML_E_UNCLOSEDTAG = 14052 # Manifest Parse Error : Duplicate attribute. SXS_XML_E_DUPLICATEATTRIBUTE = 14053 # Manifest Parse Error : Only one top level element is allowed in an XML document. SXS_XML_E_MULTIPLEROOTS = 14054 # Manifest Parse Error : Invalid at the top level of the document. SXS_XML_E_INVALIDATROOTLEVEL = 14055 # Manifest Parse Error : Invalid xml declaration. SXS_XML_E_BADXMLDECL = 14056 # Manifest Parse Error : XML document must have a top level element. SXS_XML_E_MISSINGROOT = 14057 # Manifest Parse Error : Unexpected end of file. SXS_XML_E_UNEXPECTEDEOF = 14058 # Manifest Parse Error : Parameter entities cannot be used inside markup declarations in an internal subset. SXS_XML_E_BADPEREFINSUBSET = 14059 # Manifest Parse Error : Element was not closed. SXS_XML_E_UNCLOSEDSTARTTAG = 14060 # Manifest Parse Error : End element was missing the character '>'. SXS_XML_E_UNCLOSEDENDTAG = 14061 # Manifest Parse Error : A string literal was not closed. SXS_XML_E_UNCLOSEDSTRING = 14062 # Manifest Parse Error : A comment was not closed. SXS_XML_E_UNCLOSEDCOMMENT = 14063 # Manifest Parse Error : A declaration was not closed. SXS_XML_E_UNCLOSEDDECL = 14064 # Manifest Parse Error : A CDATA section was not closed. SXS_XML_E_UNCLOSEDCDATA = 14065 # Manifest Parse Error : The namespace prefix is not allowed to start with the reserved string "xml". SXS_XML_E_RESERVEDNAMESPACE = 14066 # Manifest Parse Error : System does not support the specified encoding. SXS_XML_E_INVALIDENCODING = 14067 # Manifest Parse Error : Switch from current encoding to specified encoding not supported. SXS_XML_E_INVALIDSWITCH = 14068 # Manifest Parse Error : The name 'xml' is reserved and must be lower case. SXS_XML_E_BADXMLCASE = 14069 # Manifest Parse Error : The standalone attribute must have the value 'yes' or 'no'. SXS_XML_E_INVALID_STANDALONE = 14070 # Manifest Parse Error : The standalone attribute cannot be used in external entities. SXS_XML_E_UNEXPECTED_STANDALONE = 14071 # Manifest Parse Error : Invalid version number. SXS_XML_E_INVALID_VERSION = 14072 # Manifest Parse Error : Missing equals sign between attribute and attribute value. SXS_XML_E_MISSINGEQUALS = 14073 # Assembly Protection Error : Unable to recover the specified assembly. SXS_PROTECTION_RECOVERY_FAILED = 14074 # Assembly Protection Error : The public key for an assembly was too short to be allowed. SXS_PROTECTION_PUBLIC_KEY_TOO_LONG = 14075 # Assembly Protection Error : The catalog for an assembly is not valid, or does not match the assembly's manifest. SXS_PROTECTION_CATALOG_NOT_VALID = 14076 # An HRESULT could not be translated to a corresponding Win32 error code. SXS_UNTRANSLATABLE_HRESULT = 14077 # Assembly Protection Error : The catalog for an assembly is missing. SXS_PROTECTION_CATALOG_FILE_MISSING = 14078 # The supplied assembly identity is missing one or more attributes which must be present in this context. SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE = 14079 # The supplied assembly identity has one or more attribute names that contain characters not permitted in XML names. SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME = 14080 # The specified quick mode policy already exists. IPSEC_QM_POLICY_EXISTS = 13000 # The specified quick mode policy was not found. IPSEC_QM_POLICY_NOT_FOUND = 13001 # The specified quick mode policy is being used. IPSEC_QM_POLICY_IN_USE = 13002 # The specified main mode policy already exists. IPSEC_MM_POLICY_EXISTS = 13003 # The specified main mode policy was not found IPSEC_MM_POLICY_NOT_FOUND = 13004 # The specified main mode policy is being used. IPSEC_MM_POLICY_IN_USE = 13005 # The specified main mode filter already exists. IPSEC_MM_FILTER_EXISTS = 13006 # The specified main mode filter was not found. IPSEC_MM_FILTER_NOT_FOUND = 13007 # The specified transport mode filter already exists. IPSEC_TRANSPORT_FILTER_EXISTS = 13008 # The specified transport mode filter does not exist. IPSEC_TRANSPORT_FILTER_NOT_FOUND = 13009 # The specified main mode authentication list exists. IPSEC_MM_AUTH_EXISTS = 13010 # The specified main mode authentication list was not found. IPSEC_MM_AUTH_NOT_FOUND = 13011 # The specified quick mode policy is being used. IPSEC_MM_AUTH_IN_USE = 13012 # The specified main mode policy was not found. IPSEC_DEFAULT_MM_POLICY_NOT_FOUND = 13013 # The specified quick mode policy was not found IPSEC_DEFAULT_MM_AUTH_NOT_FOUND = 13014 # The manifest file contains one or more syntax errors. IPSEC_DEFAULT_QM_POLICY_NOT_FOUND = 13015 # The application attempted to activate a disabled activation context. IPSEC_TUNNEL_FILTER_EXISTS = 13016 # The requested lookup key was not found in any active activation context. IPSEC_TUNNEL_FILTER_NOT_FOUND = 13017 # The Main Mode filter is pending deletion. IPSEC_MM_FILTER_PENDING_DELETION = 13018 # The transport filter is pending deletion. IPSEC_TRANSPORT_FILTER_PENDING_DELETION = 13019 # The tunnel filter is pending deletion. IPSEC_TUNNEL_FILTER_PENDING_DELETION = 13020 # The Main Mode policy is pending deletion. IPSEC_MM_POLICY_PENDING_DELETION = 13021 # The Main Mode authentication bundle is pending deletion. IPSEC_MM_AUTH_PENDING_DELETION = 13022 # The Quick Mode policy is pending deletion. IPSEC_QM_POLICY_PENDING_DELETION = 13023 # No information avialable. WARNING_IPSEC_MM_POLICY_PRUNED = 13024 # No information avialable. WARNING_IPSEC_QM_POLICY_PRUNED = 13025 # ERROR_IPSEC_IKE_NEG_STATUS_BEGIN IPSEC_IKE_NEG_STATUS_BEGIN = 13800 # IKE authentication credentials are unacceptable IPSEC_IKE_AUTH_FAIL = 13801 # IKE security attributes are unacceptable IPSEC_IKE_ATTRIB_FAIL = 13802 # IKE Negotiation in progress IPSEC_IKE_NEGOTIATION_PENDING = 13803 # General processing error IPSEC_IKE_GENERAL_PROCESSING_ERROR = 13804 # Negotiation timed out IPSEC_IKE_TIMED_OUT = 13805 # IKE failed to find valid machine certificate IPSEC_IKE_NO_CERT = 13806 # IKE SA deleted by peer before establishment completed IPSEC_IKE_SA_DELETED = 13807 # IKE SA deleted before establishment completed IPSEC_IKE_SA_REAPED = 13808 # Negotiation request sat in Queue too long IPSEC_IKE_MM_ACQUIRE_DROP = 13809 # Negotiation request sat in Queue too long IPSEC_IKE_QM_ACQUIRE_DROP = 13810 # Negotiation request sat in Queue too long IPSEC_IKE_QUEUE_DROP_MM = 13811 # Negotiation request sat in Queue too long IPSEC_IKE_QUEUE_DROP_NO_MM = 13812 # No response from peer IPSEC_IKE_DROP_NO_RESPONSE = 13813 # Negotiation took too long IPSEC_IKE_MM_DELAY_DROP = 13814 # Negotiation took too long IPSEC_IKE_QM_DELAY_DROP = 13815 # Unknown error occurred IPSEC_IKE_ERROR = 13816 # Certificate Revocation Check failed IPSEC_IKE_CRL_FAILED = 13817 # Invalid certificate key usage IPSEC_IKE_INVALID_KEY_USAGE = 13818 # Invalid certificate type IPSEC_IKE_INVALID_CERT_TYPE = 13819 # No private key associated with machine certificate IPSEC_IKE_NO_PRIVATE_KEY = 13820 # Failure in Diffie-Helman computation IPSEC_IKE_DH_FAIL = 13822 # Invalid header IPSEC_IKE_INVALID_HEADER = 13824 # No policy configured IPSEC_IKE_NO_POLICY = 13825 # Failed to verify signature IPSEC_IKE_INVALID_SIGNATURE = 13826 # Failed to authenticate using kerberos IPSEC_IKE_KERBEROS_ERROR = 13827 # Peer's certificate did not have a public key IPSEC_IKE_NO_PUBLIC_KEY = 13828 # Error processing error payload IPSEC_IKE_PROCESS_ERR = 13829 # Error processing SA payload IPSEC_IKE_PROCESS_ERR_SA = 13830 # Error processing Proposal payload IPSEC_IKE_PROCESS_ERR_PROP = 13831 # Error processing Transform payload IPSEC_IKE_PROCESS_ERR_TRANS = 13832 # Error processing KE payload IPSEC_IKE_PROCESS_ERR_KE = 13833 # Error processing ID payload IPSEC_IKE_PROCESS_ERR_ID = 13834 # Error processing Cert payload IPSEC_IKE_PROCESS_ERR_CERT = 13835 # Error processing Certificate Request payload IPSEC_IKE_PROCESS_ERR_CERT_REQ = 13836 # Error processing Hash payload IPSEC_IKE_PROCESS_ERR_HASH = 13837 # Error processing Signature payload IPSEC_IKE_PROCESS_ERR_SIG = 13838 # Error processing Nonce payload IPSEC_IKE_PROCESS_ERR_NONCE = 13839 # Error processing Notify payload IPSEC_IKE_PROCESS_ERR_NOTIFY = 13840 # Error processing Delete Payload IPSEC_IKE_PROCESS_ERR_DELETE = 13841 # Error processing VendorId payload IPSEC_IKE_PROCESS_ERR_VENDOR = 13842 # Invalid payload received IPSEC_IKE_INVALID_PAYLOAD = 13843 # Soft SA loaded IPSEC_IKE_LOAD_SOFT_SA = 13844 # Soft SA torn down IPSEC_IKE_SOFT_SA_TORN_DOWN = 13845 # Invalid cookie received. IPSEC_IKE_INVALID_COOKIE = 13846 # Peer failed to send valid machine certificate IPSEC_IKE_NO_PEER_CERT = 13847 # Certification Revocation check of peer's certificate failed IPSEC_IKE_PEER_CRL_FAILED = 13848 # New policy invalidated SAs formed with old policy IPSEC_IKE_POLICY_CHANGE = 13849 # There is no available Main Mode IKE policy. IPSEC_IKE_NO_MM_POLICY = 13850 # Failed to enabled TCB privilege. IPSEC_IKE_NOTCBPRIV = 13851 # Failed to load SECURITY.DLL. IPSEC_IKE_SECLOADFAIL = 13852 # Failed to obtain security function table dispatch address from SSPI. IPSEC_IKE_FAILSSPINIT = 13853 # Failed to query Kerberos package to obtain max token size. IPSEC_IKE_FAILQUERYSSP = 13854 # Failed to obtain Kerberos server credentials for ISAKMP/ERROR_IPSEC_IKE service. Kerberos authentication will not function. The most likely reason for this is lack of domain membership. This is normal if your computer is a member of a workgroup. IPSEC_IKE_SRVACQFAIL = 13855 # Failed to determine SSPI principal name for ISAKMP/ERROR_IPSEC_IKE service (QueryCredentialsAttributes). IPSEC_IKE_SRVQUERYCRED = 13856 # Failed to obtain new SPI for the inbound SA from Ipsec driver. The most common cause for this is that the driver does not have the correct filter. Check your policy to verify the filters. IPSEC_IKE_GETSPIFAIL = 13857 # Given filter is invalid IPSEC_IKE_INVALID_FILTER = 13858 # Memory allocation failed. IPSEC_IKE_OUT_OF_MEMORY = 13859 # Failed to add Security Association to IPSec Driver. The most common cause for this is if the IKE negotiation took too long to complete. If the problem persists, reduce the load on the faulting machine. IPSEC_IKE_ADD_UPDATE_KEY_FAILED = 13860 # Invalid policy IPSEC_IKE_INVALID_POLICY = 13861 # Invalid DOI IPSEC_IKE_UNKNOWN_DOI = 13862 # Invalid situation IPSEC_IKE_INVALID_SITUATION = 13863 # Diffie-Hellman failure IPSEC_IKE_DH_FAILURE = 13864 # Invalid Diffie-Hellman group IPSEC_IKE_INVALID_GROUP = 13865 # Error encrypting payload IPSEC_IKE_ENCRYPT = 13866 # Error decrypting payload IPSEC_IKE_DECRYPT = 13867 # Policy match error IPSEC_IKE_POLICY_MATCH = 13868 # Unsupported ID IPSEC_IKE_UNSUPPORTED_ID = 13869 # Hash verification failed IPSEC_IKE_INVALID_HASH = 13870 # Invalid hash algorithm IPSEC_IKE_INVALID_HASH_ALG = 13871 # Invalid hash size IPSEC_IKE_INVALID_HASH_SIZE = 13872 # Invalid encryption algorithm IPSEC_IKE_INVALID_ENCRYPT_ALG = 13873 # Invalid authentication algorithm IPSEC_IKE_INVALID_AUTH_ALG = 13874 # Invalid certificate signature IPSEC_IKE_INVALID_SIG = 13875 # Load failed IPSEC_IKE_LOAD_FAILED = 13876 # Deleted via RPC call IPSEC_IKE_RPC_DELETE = 13877 # Temporary state created to perform reinit. This is not a real failure. IPSEC_IKE_BENIGN_REINIT = 13878 # The lifetime value received in the Responder Lifetime Notify is below the Windows 2000 configured minimum value. Please fix the policy on the peer machine. IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY = 13879 # Key length in certificate is too small for configured security requirements. IPSEC_IKE_INVALID_CERT_KEYLEN = 13881 # Max number of established MM SAs to peer exceeded. IPSEC_IKE_MM_LIMIT = 13882 # IKE received a policy that disables negotiation. IPSEC_IKE_NEGOTIATION_DISABLED = 13883 # ERROR_IPSEC_IKE_NEG_STATUS_END IPSEC_IKE_NEG_STATUS_END = 13884 pydsinternals-1.2.5/dsinternals/common/interop/enums/__init__.py000077500000000000000000000002501513773544400251710ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/properties/000077500000000000000000000000001513773544400224455ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/properties/__init__.py000077500000000000000000000002501513773544400245560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/properties/resources/000077500000000000000000000000001513773544400244575ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/properties/resources/__init__.py000077500000000000000000000002501513773544400265700ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/test/000077500000000000000000000000001513773544400212305ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/test/__init__.py000077500000000000000000000002501513773544400233410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/test/cryptography/000077500000000000000000000000001513773544400237635ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/test/cryptography/__init__.py000077500000000000000000000002501513773544400260740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/common/test/properties/000077500000000000000000000000001513773544400234245ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/common/test/properties/__init__.py000077500000000000000000000002501513773544400255350ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/000077500000000000000000000000001513773544400207475ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/SystemFlags.py000077500000000000000000000047001513773544400235660ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SystemFlags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SystemFlags(Enum): """ SystemFlags An integer value that contains flags that define additional properties of the class. https://msdn.microsoft.com/en-us/library/ms680022(VS.85).aspx """ # When applied to an attribute, the attribute will not be replicated. # When applied to a Cross-Ref object, the naming context is in NTDS. DO_NOT_REPLICATE = 1 # (0x00000001) # When applied to an attribute, the attribute will be replicated to the global catalog. # When applied to a Cross-Ref object, the naming context is a domain. REPLICATE_ATTRIBUTE = 2 # (0x00000002) # When applied to an attribute, the attribute is constructed. CONSTRUCT_ATTRIBUTE = 4 # (0x00000004) # When set, indicates the object is a category 1 object. A category 1 object is a class or attribute that is # included in the base schema included with the system. CATEGORY_1_OBJECT = 16 # (0x00000010) # The object is not moved to the Deleted Objects container when it is deleted. It will be deleted immediately. DELETE_IMMEDIATELY = 33554432 # (0x02000000) # The object cannot be moved. CANNOT_BE_MOVED = 67108864 # (0x04000000) # The object cannot be renamed. CANNOT_BE_RENAMED = 134217728 # (0x08000000) # For objects in the configuration partition, if this flag is set, the object can be moved with restrictions; otherwise, # the object cannot be moved. By default, this flag is not set on new objects created under the configuration partition. # This flag can only be set during object creation. CAN_BE_MOVED_RESTRICTED = 268435456 # (0x10000000) # For objects in the configuration partition, if this flag is set, the object can be moved; otherwise, the object cannot # be moved. By default, this flag is not set on new objects created under the configuration partition. This flag can only # be set during object creation. CONFIGURATION_CAN_BE_MOVED = 536870912 # (0x20000000) # For objects in the configuration partition, if this flag is set, the object can be renamed; otherwise, the object cannot # be renamed. By default, this flag is not set on new objects created under the configuration partition. This flag can only # be set during object creation. CAN_BE_RENAMED = 1073741824 # (0x40000000) # The object cannot be deleted. CANNOT_BE_DELETED = 2147483648 # (0x80000000) pydsinternals-1.2.5/dsinternals/datastore/__init__.py000077500000000000000000000002501513773544400230600ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/cryptography/000077500000000000000000000000001513773544400235025ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/cryptography/__init__.py000077500000000000000000000002501513773544400256130ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/directoryagent/000077500000000000000000000000001513773544400237725ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/directoryagent/__init__.py000077500000000000000000000002501513773544400261030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/enums/000077500000000000000000000000001513773544400220765ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/enums/AttributeOmSyntax.py000077500000000000000000000011621513773544400261210ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : AttributeOmSyntax.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class AttributeOmSyntax(Enum): """ AttributeOmSyntax """ Undefined = 0 Boolean = 1 Integer = 2 OctetString = 4 ObjectIdentifierString = 6 Enumeration = 10 NumericString = 18 PrintableString = 19 TeletexString = 20 IA5String = 22 UtcTimeString = 23 GeneralisedTimeString = 24 UnicodeString = 64 I8 = 65 ObjectSecurityDescriptor = 66 Object = 127 pydsinternals-1.2.5/dsinternals/datastore/enums/AttributeSystemFlags.py000077500000000000000000000021511513773544400265770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : AttributeSystemFlags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class AttributeSystemFlags(Enum): """ AttributeSystemFlags An integer value that contains flags that define additional properties of the attribute. """ NONE = 0 # The attribute will not be replicated. NotReplicated = 1 # If set, this attribute is a member of partial attribute set (PAS) regardless of the value of attribute isMemberofPartialAttributeSet. RequiredInPartialSet = 2 # The attribute is constructed. Constructed = 4 # This attribute is an operational attribute, as defined in [RFC2251] section 3.2.1. Operational = 8 # When set, indicates the object is a category 1 object. A category 1 object is a class or attribute that is included in the base schema included with the system. Base = 16 # This attribute can be used as an RDN attribute of a class. Rdn = 32 # The attribute cannot be renamed. DisallowRename = 0x8000000 pydsinternals-1.2.5/dsinternals/datastore/enums/DatabaseState.py000077500000000000000000000015341513773544400251630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : databasestate.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class DatabaseState(Enum): """ DatabaseState """ # The initial DIT is being created. Initial = 0 # The initial DIT has been created. Boot = 1 # DcPromo completed. Used in Windows Server 2000. Installed = 2 # DCPromo completed. Used since Windows Server 2003. Running = 3 # Snapshot is being created. BackedUp = 4 # DcPromo has failed. Error = 5 # The first phase of restore is done. RestoredPhaseI = 6 # DcPromo completed. RealInstalled = 7 # DcPromo is performing IFM Ifm = 8 # Demotion has begun. Demoting = 9 # Demotion has finished. Demoted = 10 pydsinternals-1.2.5/dsinternals/datastore/enums/DomainControllerOptions.py000077500000000000000000000006601513773544400273040ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : DomainControllerOptions.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class DomainControllerOptions(Enum): """ DomainControllerOptions """ NONE = 0 GlobalCatalog = 1 DisableInboundReplication = 2 DisableOutboundReplication = 4 DisableConnectionTranslation = 8 pydsinternals-1.2.5/dsinternals/datastore/enums/FunctionalLevel.py000077500000000000000000000011641513773544400255470ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : FunctionalLevel.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class FunctionalLevel(Enum): """ FunctionalLevel Domain, forest or DC functional level. We do not want to be dependent on System.DirectoryServices.ActiveDirectory, so we implement our own enum. See: https://msdn.microsoft.com/en-us/library/cc223743.aspx """ Win2000 = 0 Win2003Mixed = 1 Win2003 = 2 Win2008 = 3 Win2008R2 = 4 Win2012 = 5 Win2012R2 = 6 WinThreshold = 7 pydsinternals-1.2.5/dsinternals/datastore/enums/LinkType.py000077500000000000000000000004331513773544400242120ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : LinkType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class LinkType(Enum): """ LinkType """ ForwardLink = 0 BackLink = 1 pydsinternals-1.2.5/dsinternals/datastore/enums/PekListFlags.py000077500000000000000000000007061513773544400250060ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : PekListFlags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class PekListFlags(Enum): """ PekListFlags Format of the Password Encryption Key. """ # The PEK is not encrypted. This is a transient state between dcpromo and first boot. Clear = 0 # The PEK is encrypted. Encrypted = 1 pydsinternals-1.2.5/dsinternals/datastore/enums/PekListVersion.py000077500000000000000000000007511513773544400253770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : PekListVersion.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class PekListVersion(Enum): """ PekListVersion Password Encryption Key List Version """ # Version used before Windows 2000 RC2. PreW2kRC2 = 1 # Version used since Windows 2000 RC2. W2k = 2 # Version used since Windows Server 2016 TP4 W2016 = 3 pydsinternals-1.2.5/dsinternals/datastore/enums/SearchFlags.py000077500000000000000000000035601513773544400246410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SearchFlags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SearchFlags(Enum): """ SearchFlags https://msdn.microsoft.com/en-us/library/cc223153.aspx """ # No flags set. NONE = 0 # Index over attribute only. AttributeIndex = 0x00000001 # Index over container and attribute. ContainerIndex = 0x00000002 # Add this attribute to the ambiguous name resolution (ANR) set (should be used in conjunction with 1). AmbiguousNameResolution = 0x00000004 # Preserve this attribute on logical deletion (that is, make this attribute available on tombstones). PreserveOnDelete = 0x00000008 # Include this attribute when copying a user object Copy = 0x00000010 # Create a Tuple index for the attribute to improve medial searches TupleIndex = 0x00000020 # Specifies a hint for the DC to create subtree index for a Virtual List View (VLV) search. SubtreeIndex = 0x00000040 # Specifies that the attribute is confidential. An extended access check is required. Confidential = 0x00000080 # Specifies that auditing of changes to individual values contained in this attribute MUST NOT be performed. NeverValueAudit = 0x00000100 # Specifies that the attribute is a member of the filtered attribute set. RODCFilteredAttribute = 0x00000200 # Specifies a hint to the DC to perform additional implementation-specific, nonvisible tracking of link values. ExtendedLinkTracking = 0x00000400 # Specifies that the attribute is not to be returned by search operations that are not scoped to a single object. BaseOnly = 0x00000800 # Specifies that the attribute is a partition secret. An extended access check is required. PartitionSecret = 0x00001000 pydsinternals-1.2.5/dsinternals/datastore/enums/__init__.py000077500000000000000000000002501513773544400242070ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/exceptions/000077500000000000000000000000001513773544400231305ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/exceptions/__init__.py000077500000000000000000000002501513773544400252410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/extensions/000077500000000000000000000000001513773544400231465ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/extensions/__init__.py000077500000000000000000000002501513773544400252570ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/interfaces/000077500000000000000000000000001513773544400230725ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/interfaces/__init__.py000077500000000000000000000002501513773544400252030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/properties/000077500000000000000000000000001513773544400231435ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/properties/__init__.py000077500000000000000000000002501513773544400252540ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/test/000077500000000000000000000000001513773544400217265ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/test/__init__.py000077500000000000000000000002501513773544400240370ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/datastore/test/properties/000077500000000000000000000000001513773544400241225ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/datastore/test/properties/__init__.py000077500000000000000000000002501513773544400262330ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/000077500000000000000000000000001513773544400207665ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/__init__.py000077500000000000000000000002501513773544400230770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/database/000077500000000000000000000000001513773544400225325ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/database/__init__.py000077500000000000000000000002501513773544400246430ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/database/isam/000077500000000000000000000000001513773544400234635ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/database/isam/BoundCriteria.py000077500000000000000000000005771513773544400266030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : BoundCriteria.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class BoundCriteria(Enum): # Choices for Cursor.FindRecordsBetween # Whether the bounds are included. Inclusive = 0 # Whether the bounds are excluded. Exclusive = 1 pydsinternals-1.2.5/dsinternals/microsoft/database/isam/ColumnFlags.py000077500000000000000000000072571513773544400262650ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : ColumnFlags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum from dsinternals.microsoft.isam.esent.interop.grbits import * class ColumnFlags(Enum): """ ColumnFlags Column flags enumeration """ # Default options. NONE = ColumndefGrbit.NONE # The column will be fixed. It will always use the same amount of space in a row, # regardless of how much data is being stored in the column. Fixed # cannot be used with Tagged. This bit cannot be used with long values (i.e. Text # and Binary longer than 255 bytes). Fixed = ColumndefGrbit.ColumnFixed # A variable sized column, cannot be bigger than 255 bytes. Variable = ColumndefGrbit.NONE # Sparse columns take no space in the record unless set (unlike Fixed # or Variable columns) and can be up to 2GB in length. Can't be used with # . Sparse = ColumndefGrbit.ColumnTagged # This column cannot be set to NULL NonNull = ColumndefGrbit.ColumnNotNULL # This column will contain a version number maintained by the ISAM # that will be incremented on every update of the record. # This option can only be applied to integer columns. # This option can't be used with , # , or . Version = ColumndefGrbit.ColumnVersion # The column will automatically be incremented. The number is an increasing number, and # is guaranteed to be unique within a table. The numbers, however, might not be continuous. # For example, if five rows are inserted into a table, the "autoincrement" column could # contain the values { 1, 2, 6, 7, 8 }. This bit can only be used on columns of type # integer types (int and long). AutoIncrement = ColumndefGrbit.ColumnAutoincrement # This column can be updated by the application (read-only flag, returned # by GetInformation-style calls only). Updatable = ObjectInfoGrbit.Updatable # The column can be multi-valued. # A multi-valued column can have zero, one, or more values # associated with it. The various values in a multi-valued column are identified by a number # called the itagSequence member. # Multi-valued columns must be tagged columns; that is, they cannot be fixed-length or # variable-length columns. # All multi-valued columns are also sparse columns. MultiValued = ColumndefGrbit.ColumnMultiValued # Specifies that a column is an escrow update column. An escrow update column can be # updated concurrently by different sessions with JetEscrowUpdate and will maintain # transactional consistency. An escrow update column must also meet the following conditions: # An escrow update column can be created only when the table is empty. # An escrow update column must be of type JET_coltypLong. # An escrow update column must have a default value. # JET_bitColumnEscrowUpdate cannot be used in conjunction with , # , or . EscrowUpdate = ColumndefGrbit.ColumnEscrowUpdate # When the escrow-update column reaches a value of zero, the callback function will be invoked. Finalize = ColumndefGrbit.ColumnFinalize # The default value for a column will be provided by a callback function. A column that # has a user-defined default must be a tagged column. UserDefinedDefault = ColumndefGrbit.ColumnUserDefinedDefault # This is a finalizable column (delete record if escrow value equals 0). DeleteOnZero = Server2003Grbits.ColumnDeleteOnZero pydsinternals-1.2.5/dsinternals/microsoft/database/isam/IndexFlags.py000077500000000000000000000076261513773544400260770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : IndexFlags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum from dsinternals.microsoft.isam.esent.interop.grbits import * class IndexFlags(Enum): """ IndexFlags """ # The index will use the default set of flags. NONE = CreateIndexGrbit.NONE # All keys in the index must be unique or the insertion or update of # the associated record will fail. This uniqueness constraint also # applies to truncated keys. Unique = CreateIndexGrbit.IndexUnique # The keys in this index represent the primary key for the record. # At this time, the primary index is also the clustered index of the # table. If no primary index is defined for a table then a default # primary index with a sequential key will be used. Primary = CreateIndexGrbit.IndexPrimary # Each key in the index must have a non-NULL value for every key # column in the index definition or the insertion or update of the # associated record will fail. DisallowNull = CreateIndexGrbit.IndexDisallowNull # The index will only contain entries for keys with at least one # non-NULL key column. IgnoreNull = CreateIndexGrbit.IndexIgnoreNull # The index will only contain entries for keys comprised entirely of # non-NULL key columns. IgnoreAnyNull = CreateIndexGrbit.IndexIgnoreAnyNull # The index will contain entries for keys containing any combination # of NULL and non-NULL key columns. The collation order of NULL key # column values versus non-NULL key column values is determined by the # SortNullsLow and SortNullsHigh IndexFlags. This represents the # default treatment of NULL key column values in an index entry. AllowNull = CreateIndexGrbit.NONE # The collation order of the index is set such that NULL key column # values sort closer to the start of the index than non-NULL key # column values. This is the default NULL collation order. SortNullsLow = CreateIndexGrbit.NONE # The collation order of the index is set such that NULL key column # values sort closer to the end of the index than non-NULL key column # values. SortNullsHigh = CreateIndexGrbit.IndexSortNullsHigh # Any key in the index may be larger than the maximum size of the key # supported by that index except that any key beyond the maximum size # will be truncated. This means that there can be no meaningful # relative ordering between keys that are identical after truncation # nor can there be any distinction between entries generated by # different key column values whose keys are identical after # truncation. # # This bit is unique to the Isam layer. It is not actually supported # by the underlying database layer. If it is not specified, # is assumed. This is the opposite default # of the underlying database layer # # and # are mutually exclusive. # # AllowTruncation = 0x01000000 # Each key in the index must be smaller than the maximum size of the # key supported by that index or the insertion or update of the # associated record will fail. Note that at the present time there # is some overhead when converting key column values into a key so # the maximum size of the key will be reached sooner than expected # based on the raw size of the key column values. Truncated keys are # prohibited by default. # # This is the default behaviour for Isam, but not the default for # the underlying database layer. # and # are mutually exclusive. # DisallowTruncation = VistaGrbits.IndexDisallowTruncation pydsinternals-1.2.5/dsinternals/microsoft/database/isam/MatchCriteria.py000077500000000000000000000026151513773544400265630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : MatchCriteria.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum from dsinternals.microsoft.isam.esent.interop.grbits import * class MatchCriteria(Enum): """ MatchCriteria Choices for Cursor.FindRecords """ # The cursor will be positioned at the index entry closest to the # start of the index that exactly matches the search key. EqualTo = SeekGrbit.SeekEQ # The cursor will be positioned at the index entry closest to the # end of the index that is less than an index entry that would # exactly match the search criteria. LessThan = SeekGrbit.SeekLT # The cursor will be positioned at the index entry closest to the # end of the index that is less than or equal to an index entry # that would exactly match the search criteria. LessThanOrEqualTo = SeekGrbit.SeekLE # The cursor will be positioned at the index entry closest to the # start of the index that is greater than or equal to an index # entry that would exactly match the search criteria. GreaterThanOrEqualTo = SeekGrbit.SeekGE # The cursor will be positioned at the index entry closest to the # start of the index that is greater than an index entry that # would exactly match the search criteria. GreaterThan = SeekGrbit.SeekGT pydsinternals-1.2.5/dsinternals/microsoft/database/isam/TableType.py000077500000000000000000000026251513773544400257360ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : TableType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class TableType(Enum): """ TableType Table types enumeration """ # The empty value. NONE = 0 # An ordinary database table. Base = 1 # A temporary table that can only be used to sort rows. A sort is used # in two phases: insert phase and extraction phase. In the insert # phase, rows can only be inserted into the table. In the extraction # phase, rows can only be extracted in order from first to last. Once # all rows have been extracted, the sort can only be dropped. Temporary # tables are volatile. Sort = 2 # A temporary table that is initially created by using a sort. This # table is used in two phases: insert phase and main phase. In # the insert phase, rows can only be inserted into the table. When # the insert phase is ended by performing any non-insert operation, # the rows created during the insert phase are sorted and pushed into # the temporary table. The table then enters the main phase where any # operation is allowed. Temporary tables are volatile. PreSortTemporary = 3 # An ordinary temporary table. Any operation is allowed at any time. # Temporary tables are volatile. Temporary = 4 pydsinternals-1.2.5/dsinternals/microsoft/database/isam/__init__.py000077500000000000000000000002501513773544400255740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/database/isam/config/000077500000000000000000000000001513773544400247305ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/database/isam/config/__init__.py000077500000000000000000000002501513773544400270410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/database/isam/config/databaseconfig/000077500000000000000000000000001513773544400276625ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/database/isam/config/databaseconfig/__init__.py000077500000000000000000000002501513773544400317730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/database/isam/config/iconfigset.py000077500000000000000000000026451513773544400274460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : iconfigset.py # Author : Podalirius (@podalirius_) # Date created : 1 Aug 2021 from enum import Enum class MergeRules(Enum): """ MergeRules Merge rules for merging config sets. """ # Throw an exception if a merge causes a parameter to be overwritten with a different value in the destination config set. ThrowOnConflicts = 0 # Overwrite destination config set. Overwrite = 1 # Keep existing values of the destination config set intact while performing the merge. KeepExisting = 2 class ConfigSetMergeException(Exception): """ ConfigSetMergeException Represents exceptions thrown while merging two config sets. """ # Gets the MergeSource config set used during the merge operation. MergeSource = None # Gets the destination config set used during the merge operation. MergeDest = None def __init__(self, mergeSource, mergeDest, message:str): """ Initializes a new instance of the ConfigSetMergeException class. The MergeSource config set. The destination config set. The exception message. The inner exception. """ self.MergeSource = mergeSource self.MergeDest = mergeDest pydsinternals-1.2.5/dsinternals/microsoft/database/isam/properties/000077500000000000000000000000001513773544400256575ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/database/isam/properties/__init__.py000077500000000000000000000002501513773544400277700ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/isam/000077500000000000000000000000001513773544400217175ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/isam/__init__.py000077500000000000000000000002501513773544400240300ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/000077500000000000000000000000001513773544400230355ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/__init__.py000077500000000000000000000002501513773544400251460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/000077500000000000000000000000001513773544400245155ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_CP.py000077500000000000000000000006361513773544400261030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_CP.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_CP(Enum): """ JET_CP Codepage for an ESENT column. """ # Code page for non-text columns. NONE = 0 # Unicode encoding. Unicode = 1200 # ASCII encoding. ASCII = 1252 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_DbInfo.py000077500000000000000000000035331513773544400267410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_DbInfo.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_DbInfo(Enum): """ JET_DbInfo Info levels for retrieving database info. """ # Returns the path to the database file (string). Filename = 0 # Returns the locale identifier (LCID) associated with this database (Int32). LCID = 3 # Returns a . This indicates whether the # database is opened in exclusive mode. If the database is in exclusive mode then # will be returned, otherwise zero is # returned. Other database grbit options for JetAttachDatabase and JetOpenDatabase # are not returned. Options = 6 # Returns a number one greater than the maximum level to which transactions can be # nested. If is called (in a nesting fashion, that is, on the # same session, without a commit or rollback) as many times as this value, on the # last call will be returned (Int32). Transactions = 7 # Returns the major version of the database engine (Int32). Version = 8 # Returns the filesize of the database, in pages (Int32). Filesize = 10 # Returns the owned space of the database, in pages (Int32). SpaceOwned = 11 # Returns the available space in the database, in pages (Int32). SpaceAvailable = 12 # Returns a object. Misc = 14 # Returns a boolean indicating whether the database is attached (boolean). DBInUse = 15 # Returns the page size of the database (Int32). PageSize = 17 # Returns the type of the database (). FileType = 19 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_ERRCAT.py000077500000000000000000000115461513773544400265630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_ERRCAT.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum # The error category. The hierarchy is as follows: # # JET_errcatError # | # |-- JET_errcatOperation # | |-- JET_errcatFatal # | |-- JET_errcatIO // bad IO issues, may or may not be transient. # | |-- JET_errcatResource # | |-- JET_errcatMemory // out of memory (all variants) # | |-- JET_errcatQuota # | |-- JET_errcatDisk // out of disk space (all variants) # |-- JET_errcatData # | |-- JET_errcatCorruption # | |-- JET_errcatInconsistent // typically caused by user Mishandling # | |-- JET_errcatFragmentation # |-- JET_errcatApi # |-- JET_errcatUsage # |-- JET_errcatState # |-- JET_errcatObsolete class JET_ERRCAT(Enum): """ JET_ERRCAT """ # Unknown category. Unknown = 0 # A generic category. Error = 1 # Errors that can usually happen any time due to uncontrollable # conditions. Frequently temporary, but not always. # # Recovery: Probably retry, or eventually inform the operator. Operation = 2 # This sort error happens only when ESE encounters an error condition # so grave, that we can not continue on in a safe (often transactional) # way, and rather than corrupt data we throw errors of this category. # # Recovery: Restart the instance or process. If the problem persists # inform the operator. Fatal = 3 # O errors come from the OS, and are out of ESE's control, this sort # of error is possibly temporary, possibly not. # # Recovery: Retry. If not resolved, ask operator about disk issue. IO = 4 # This is a category that indicates one of many potential out-of-resource # conditions. Resource = 5 # Classic out of memory condition. # # Recovery: Wait a while and retry, free up memory, or quit. Memory = 6 # Certain "specialty" resources are in pools of a certain size, making # it easier to detect leaks of these resources. # # Recovery: Bug fix, generally the application should Assert() on these # conditions so as to detect these issues during development. However, # in retail code, the best to hope for is to treat like Memory. Quota = 7 # Out of disk conditions. # # Recovery: Can retry later in the hope more space is available, or # ask the operator to free some disk space. Disk = 8 # A data-related error. Data = 9 # My hard drive ate my homework. Classic corruption issues, frequently # permanent without corrective action. # # Recovery: Restore from backup, perhaps the ese utilities repair # operation (which only salvages what data is left / lossy) .Also # in the case of recovery(JetInit) perhaps recovery can be performed # by allowing data loss. Corruption = 10 # This is similar to Corruption in that the database and/or log files # are in a state that is inconsistent and unreconcilable with each # other. Often this is caused by application/administrator mishandling. # Recovery: Restore from backup, perhaps the ese utilities repair # operation (which only salvages what data is left / lossy). Also # in the case of recovery(JetInit) perhaps recovery can be performed # by allowing data loss. Inconsistent = 11 # This is a class of errors where some persisted internal resource ran # out. # # Recovery: For database errors, offline defragmentation will rectify # the problem, for the log files _first_ recover all attached databases # to a clean shutdown, and then delete all the log files and checkpoint. Fragmentation = 12 # A container for and . Api = 13 # Classic usage error, this means the client code did not pass correct # arguments to the JET API. This error will likely not go away with # retry. # # Recovery: Generally speaking client code should Assert() this class # of errors is not returned, so issues can be caught during development. # In retail, the app will probably have little option but to return # the issue up to the operator. Usage = 14 # This is the classification for different signals the API could return # describe the state of the database, a classic case is JET_errRecordNotFound # which can be returned by JetSeek() when the record you asked for # was not found. # # Recovery: Not really relevant, depends greatly on the API. State = 15 # The error is recognized as a valid error, but is not expected to be # returned by this version of the API. Obsolete = 16 # The maximum value for the enum. This should not be used. Max = 17 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_ErrorInfo.py000077500000000000000000000005431513773544400275030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_ErrorInfo.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_ErrorInfo(Enum): """ JET_ErrorInfo """ # Retrieve information about the specific error passed in pvContext. SpecificErr = 1, pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_EventLoggingLevels.py000077500000000000000000000012211513773544400313330ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_EventLoggingLevels.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_EventLoggingLevels(Enum): """ JET_EventLoggingLevels Options for EventLoggingLevel. """ # Disable all events. Disable = 0 # Default level. Windows 7 and later. Min = 1 # Low verbosity and lower. Windows 7 and later. Low = 25 # Medium verbosity and lower. Windows 7 and later. Medium = 50 # High verbosity and lower. Windows 7 and later. High = 75 # All events. Max = 100 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_ExceptionAction.py000077500000000000000000000007411513773544400306720ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_ExceptionAction.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_ExceptionAction(Enum): """ JET_ExceptionAction Constants to be used with JET_paramExceptionAction. """ # Display message box on exception. MsgBox = 0x00000001 # Do not handle exceptions. Throw them to the caller. NONE = 0x00000002 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_INDEX_COLUMN.py000077500000000000000000000061451513773544400275260ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : jet_index_column.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JetRelop(Enum): """ Comparison operation for filter defined as . """ # Accept only rows which have column value equal to the given value. Equals = 0 # Accept only rows which have columns whose prefix matches the given value. PrefixEquals = 1 # Accept only rows which have column value not equal to the given value. NotEquals = 2 # Accept only rows which have column value less than or equal a given value. LessThanOrEqual = 3 # Accept only rows which have column value less than a given value. LessThan = 4 # Accept only rows which have column value greater than or equal a given value. GreaterThanOrEqual = 5 # Accept only rows which have column value greater than a given value. GreaterThan = 6 # Accept only rows which have column value ANDed with a given bitmask yielding zero. BitmaskEqualsZero = 7 # Accept only rows which have column value ANDed with a given bitmask yielding non-zero. BitmaskNotEqualsZero = 8 # The native version of the structure. NATIVE_INDEX_COLUMN = { # The column identifier for the column to check. "columnid": "", # The comparison operation. "relop": "", # A pointer to a value to compare. "pvData": "", # The size of value beginning at pvData, in bytes. "cbData": "", # Options regarding this column value. "grbit": "" } class JET_INDEX_COLUMN(object): """ JET_INDEX_COLUMN Contains filter definition for and . """ # Gets or sets the column identifier for the column to retrieve. columnid = None # Gets or sets the filter comparison operation. relop: JetRelop = None # Gets or sets the value to comparte the column with. pvData: bytes = b"" # Gets or sets the option for this column comparison. grbit = None def toString(self) -> str: """ Returns a that represents the current . A that represents the current . """ return "JET_INDEX_COLUMN(0x{0:x})".format(self.columnid) def GetNativeIndexColumn(self, handles): """ Gets the NATIVE_indexcolumn structure that represents the object. GC handle collection to add any pinned handles. The NATIVE_indexcolumn structure. """ indexColumn = NATIVE_INDEX_COLUMN.copy() indexColumn['columnid'] = self.columnid.Value indexColumn['relop'] = self.relop indexColumn['grbit'] = self.grbit if self.pvData is not None: indexColumn.pvData = handles.Add(self.pvData) indexColumn.cbData = self.pvData.Length return indexColumn pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_IOPriority.py000077500000000000000000000016601513773544400276500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_IOPriority.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_IOPriority(Enum): """ JET_IOPriority Values for use with . """ # This is the default I/O priority level. Normal = 0x0 # Subsequent I/Os issued will be issued at Low priority. Low = 0x1 # Subsequent I/Os issued for checkpoint advancement will be issued at Low priority. # Available on Windows 8.1 and later. LowForCheckpoint = 0x2 # Subsequent I/Os issued for scavenging buffers will be issued at Low priority. # Available on Windows 8.1 and later. LowForScavenge = 0x4 # Subsequent I/Os issued for shrinking the database cache will be issued at Low priority. # Available on Windows 8.1 and later. LowForCacheShrink = 0x8 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_IdxInfo.py000077500000000000000000000032631513773544400271400ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_IdxInfo.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_IdxInfo(Enum): """ JET_IdxInfo Info levels for retrieve index information with JetGetIndexInfo. and JetGetTableIndexInfo. """ # Returns a structure with information about the index. Default = 0 # Returns a structure with information about the index. List = 1 # SysTabCursor is obsolete. # This value is not used, and is provided for completeness to match the published header in the SDK. SysTabCursor = 2 # OLC is obsolete. # This value is not used, and is provided for completeness to match the published header in the SDK. OLC = 3 # Reset OLC is obsolete. # This value is not used, and is provided for completeness to match the published header in the SDK. ResetOLC = 4 # Returns an integer with the space usage of the index. SpaceAlloc = 5 # Returns an integer with the LCID of the index. LCID = 6 # Langid is obsolete. Use instead. Langid = 6 # Returns an integer with the count of indexes in the table. Count = 7 # Returns a ushort with the value of cbVarSegMac the index was created with. VarSegMac = 8 # Returns a identifying the index. IndexId = 9 # Introduced in Windows Vista. Returns a ushort with the value of cbKeyMost the # index was created with. KeyMost = 10pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_Move.py000077500000000000000000000007631513773544400265100ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_Move.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_Move(Enum): """ Offsets for JetMove. """ # Move the cursor to the first index entry. First = -2147483648 # Move to the previous index entry. Previous = -1 # Move to the next index entry. Next = 1 # Move to the last index entry. Last = 0x7fffffff pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_SNP.py000077500000000000000000000013251513773544400262350ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_SNP.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_SNP(Enum): """ JET_SNP The type of operation that progress is being reported for. """ # Callback is for a repair option. Repair = 2 # Callback is for database defragmentation. Compact = 4 # Callback is for a restore options. Restore = 8 # Callback is for a backup options. Backup = 9 # Callback is for database zeroing. Scrub = 11 # Callback is for the process of upgrading the record format of # all database pages. UpgradeRecordFormat = 12 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_SNT.py000077500000000000000000000012721513773544400262420ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_SNT.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_SNT(Enum): """ JET_SNT Type of progress being reported. """ # Callback for the beginning of an operation. Begin = 5 # Callback for operation progress. Progress = 0 # Callback for the completion of an operation. Complete = 6 # Callback for failure during the operation. Fail = 3 # RecoveryStep was used for internal reserved functionality # prior to Windows 8. Windows 8 and later no longer use RecoveryStep. RecoveryStep = 8 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_TblInfo.py000077500000000000000000000066271513773544400271440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_TblInfo.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_TblInfo(Enum): """ JET_TblInfo Info levels for retrieving table info with JetGetTableInfo. """ # Default option. Retrieves a containing # information about the table. Use this option with # . Default = 0 # Retrieves the name of the table. Use this option with # . Name = 1 # Retrieves the of the database containing the # table. Use this option with # . Dbid = 2 # The behavior of the method depends on how large the array that is passed # to the method is. The array must have at least two entries. # The first entry will contain the number of Owned Extents in the table. # The second entry will contain the number of Available Extents in the table. # If the array has more than two entries then the remaining bytes of # the buffer will consist of an array of structures that represent a list of # extents. This structure contains two members: the last page number in the # extent and the number of pages in the extent. Use this option with # . SpaceUsage = 7 # The array passed to JetGetTableInfo must have two entries. # The first entry will be set to the number of pages in the table. # The second entry will be set to the target density of pages for the table. # Use this option with # . SpaceAlloc = 9 # Gets the number of owned pages in the table. Use this option with # . SpaceOwned = 10 # Gets the number of available pages in the table. Use this option with # . SpaceAvailable = 11 # If the table is a derived table, the result will be filled in with the # name of the table from which the derived table inherited its DDL. If # the table is not a derived table, the buffer will an empty string. # Use this option with # . TemplateTableName = 12 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_cbtyp.py000077500000000000000000000052631513773544400267230ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_cbtyp.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_cbtyp(Enum): """ JET_cbtyp Type of progress being reported. """ # This callback is reserved and always considered invalid. Null = 0 # A finalizable column has gone to zero. Finalize = 0x1 # This callback will occur just before a new record is inserted into # a table by a call to JetUpdate. BeforeInsert = 0x2 # This callback will occur just after a new record has been inserted # into a table by a call to JetUpdate but before JetUpdate returns. AfterInsert = 0x4 # This callback will occur just prior to an existing record in a table # being changed by a call to JetUpdate. BeforeReplace = 0x8 # This callback will occur just after an existing record in a table # has been changed by a call to JetUpdate but prior to JetUpdate returning. AfterReplace = 0x10 # This callback will occur just before an existing record in a table # is deleted by a call to JetDelete. BeforeDelete = 0x20 # This callback will occur just after an existing record in a table # is deleted by a call to JetDelete. AfterDelete = 0x40 # This callback will occur when the engine needs to retrieve the # user defined default value of a column from the application. # This callback is essentially a limited implementation of # JetRetrieveColumn that is evaluated by the application. A maximum # of one column value can be returned for a user defined default value. UserDefinedDefaultValue = 0x80 # This callback will occur when the online defragmentation of a # database as initiated by JetDefragment has stopped due to either the # process being completed or the time limit being reached. OnlineDefragCompleted = 0x100 # This callback will occur when the application needs to clean up # the context handle for the Local Storage associated with a cursor # that is being released by the database engine. For more information, # see JetSetLS. The delegate for this callback reason is # configured by means of JetSetSystemParameter with JET_paramRuntimeCallback. FreeCursorLS = 0x200 # This callback will occur as the result of the need for the application # to cleanup the context handle for the Local Storage associated with # a table that is being released by the database engine. For more information, # see JetSetLS. The delegate for this callback reason is configured # by means of JetSetSystemParameter with JET_paramRuntimeCallback. FreeTableLS = 0x400pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_coltyp.py000077500000000000000000000022031513773544400271030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_coltyp.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_coltyp(Enum): """ JET_coltyp ESENT column types. This list is not extensive. Some column types introduced later are in different classes, such as . """ # Null column type. Invalid for column creation. Nil = 0 # True, False or NULL. Bit = 1 # 1-byte integer, unsigned. UnsignedByte = 2 # 2-byte integer, signed. Short = 3 # 4-byte integer, signed. Long = 4 # 8-byte integer, signed. Currency = 5 # 4-byte IEEE single-precisions. IEEESingle = 6 # 8-byte IEEE double-precision. IEEEDouble = 7 # Integral date, fractional time. DateTime = 8 # Binary data, up to 255 bytes. Binary = 9 # Text data, up to 255 bytes. Text = 10 # Binary data, up to 2GB. LongBinary = 11 # Text data, up to 2GB. LongText = 12 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_dbstate.py000077500000000000000000000011371513773544400272240ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_dbstate.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_dbstate(Enum): """ Database states (used in ). """ # The database was just created. JustCreated = 1 # Dirty shutdown (inconsistent) database. DirtyShutdown = 2 # Clean shutdown (consistent) database. CleanShutdown = 3 # Database is being converted. BeingConverted = 4 # Database was force-detached. ForceDetach = 5 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_err.py000077500000000000000000001066021513773544400263710ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_err.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_err(Enum): """ JET_err ESENT error codes. """ # Successful operation. Success = 0 #region Errors # Resource Failure Simulator failure RfsFailure = -100 # Resource Failure Simulator not initialized RfsNotArmed = -101 # Could not close file FileClose = -102 # Could not start thread OutOfThreads = -103 # System busy due to too many IOs TooManyIO = -105 # A requested async task could not be executed TaskDropped = -106 # Fatal internal error InternalError = -107 # You are running MinESE, that does not have all features compiled in. This functionality is only supported in a full version of ESE. DisabledFunctionality = -112 # The desired OS functionality could not be located and loaded / linked. UnloadableOSFunctionality = -113 # Buffer dependencies improperly set. Recovery failure DatabaseBufferDependenciesCorrupted = -255 # Version already existed. Recovery failure PreviousVersion = -322 # Reached Page Boundary PageBoundary = -323 # Reached Key Boundary KeyBoundary = -324 # Database corrupted BadPageLink = -327 # Bookmark has no corresponding address in database BadBookmark = -328 # A call to the operating system failed NTSystemCallFailed = -334 # Database corrupted BadParentPageLink = -338 # AvailExt cache doesn't match btree SPAvailExtCacheOutOfSync = -340 # AvailExt space tree is corrupt SPAvailExtCorrupted = -341 # Out of memory allocating an AvailExt cache node SPAvailExtCacheOutOfMemory = -342 # OwnExt space tree is corrupt SPOwnExtCorrupted = -343 # Dbtime on current page is greater than global database dbtime DbTimeCorrupted = -344 # key truncated on index that disallows key truncation KeyTruncated = -346 # Some database pages have become unreachable even from the avail tree, only an offline defragmentation can return the lost space. DatabaseLeakInSpace = -348 # Database corrupted. Searching an unexpectedly empty page. BadEmptyPage = -351 # Number of lines on the page is too few compared to the line being operated on BadLineCount = -354 # Key is too large KeyTooBig = -408 # illegal attempt to separate an LV which must be intrinsic CannotSeparateIntrinsicLV = -416 # Operation not supported on separated long-value SeparatedLongValue = -421 # Can only preread long value columns that can be separate, e.g. not size constrained so that they are fixed or variable columns MustBeSeparateLongValue = -423 # Cannot preread long values when current index secondary InvalidPreread = -424 # Column reference is invalid InvalidColumnReference = -426 # Column reference is stale StaleColumnReference = -427 # A compression integrity check failed. Decompressing data failed the integrity checksum indicating a data corruption in the compress/decompress pipeline. CompressionIntegrityCheckFailed = -431 # Logged operation cannot be redone InvalidLoggedOperation = -500 # Log file is corrupt LogFileCorrupt = -501 # No backup directory given NoBackupDirectory = -503 # The backup directory is not emtpy BackupDirectoryNotEmpty = -504 # Backup is active already BackupInProgress = -505 # Restore in progress RestoreInProgress = -506 # Missing the log file for check point MissingPreviousLogFile = -509 # Failure writing to log file LogWriteFail = -510 # Try to log something after recovery faild LogDisabledDueToRecoveryFailure = -511 # Try to log something during recovery redo CannotLogDuringRecoveryRedo = -512 # Name of logfile does not match internal generation number LogGenerationMismatch = -513 # Version of log file is not compatible with Jet version BadLogVersion = -514 # Timestamp in next log does not match expected InvalidLogSequence = -515 # Log is not active LoggingDisabled = -516 # Log buffer is too small for recovery LogBufferTooSmall = -517 # Maximum log file number exceeded LogSequenceEnd = -519 # No backup in progress NoBackup = -520 # Backup call out of sequence InvalidBackupSequence = -521 # Cannot do backup now BackupNotAllowedYet = -523 # Could not delete backup file DeleteBackupFileFail = -524 # Could not make backup temp directory MakeBackupDirectoryFail = -525 # Cannot perform incremental backup when circular logging enabled InvalidBackup = -526 # Restored with errors RecoveredWithErrors = -527 # Current log file missing MissingLogFile = -528 # Log disk full LogDiskFull = -529 # Bad signature for a log file BadLogSignature = -530 # Bad signature for a db file BadDbSignature = -531 # Bad signature for a checkpoint file BadCheckpointSignature = -532 # Checkpoint file not found or corrupt CheckpointCorrupt = -533 # Patch file page not found during recovery MissingPatchPage = -534 # Patch file page is not valid BadPatchPage = -535 # Redo abruptly ended due to sudden failure in reading logs from log file RedoAbruptEnded = -536 # Hard restore detected that patch file is missing from backup set PatchFileMissing = -538 # Database does not belong with the current set of log files DatabaseLogSetMismatch = -539 # Database and streaming file do not match each other DatabaseStreamingFileMismatch = -540 # actual log file size does not match JET_paramLogFileSize LogFileSizeMismatch = -541 # Could not locate checkpoint file CheckpointFileNotFound = -542 # The required log files for recovery is missing. RequiredLogFilesMissing = -543 # Soft recovery is intended on a backup database. Restore should be used instead SoftRecoveryOnBackupDatabase = -544 # databases have been recovered, but the log file size used during recovery does not match JET_paramLogFileSize LogFileSizeMismatchDatabasesConsistent = -545 # the log file sector size does not match the current volume's sector size LogSectorSizeMismatch = -546 # databases have been recovered, but the log file sector size (used during recovery) does not match the current volume's sector size LogSectorSizeMismatchDatabasesConsistent = -547 # databases have been recovered, but all possible log generations in the current sequence are used; delete all log files and the checkpoint file and backup the databases before continuing LogSequenceEndDatabasesConsistent = -548 # Illegal attempt to replay a streaming file operation where the data wasn't logged. Probably caused by an attempt to roll-forward with circular logging enabled StreamingDataNotLogged = -549 # Database was not shutdown cleanly. Recovery must first be run to properly complete database operations for the previous shutdown. DatabaseDirtyShutdown = -550 # Database last consistent time unmatched ConsistentTimeMismatch = -551 # Patch file is not generated from this backup DatabasePatchFileMismatch = -552 # The starting log number too low for the restore EndingRestoreLogTooLow = -553 # The starting log number too high for the restore StartingRestoreLogTooHigh = -554 # Restore log file has bad signature GivenLogFileHasBadSignature = -555 # Restore log file is not contiguous GivenLogFileIsNotContiguous = -556 # Some restore log files are missing MissingRestoreLogFiles = -557 # The database missed a previous full backup before incremental backup MissingFullBackup = -560 # The backup database size is not in 4k BadBackupDatabaseSize = -561 # Attempted to upgrade a database that is already current DatabaseAlreadyUpgraded = -562 # Attempted to use a database which was only partially converted to the current format -- must restore from backup DatabaseIncompleteUpgrade = -563 # Some current log files are missing for continuous restore MissingCurrentLogFiles = -565 # dbtime on page smaller than dbtimeBefore in record DbTimeTooOld = -566 # dbtime on page in advance of the dbtimeBefore in record DbTimeTooNew = -567 # Some log or patch files are missing during backup MissingFileToBackup = -569 # torn-write was detected in a backup set during hard restore LogTornWriteDuringHardRestore = -570 # torn-write was detected during hard recovery (log was not part of a backup set) LogTornWriteDuringHardRecovery = -571 # corruption was detected in a backup set during hard restore LogCorruptDuringHardRestore = -573 # corruption was detected during hard recovery (log was not part of a backup set) LogCorruptDuringHardRecovery = -574 # Cannot have logging enabled while attempting to upgrade db MustDisableLoggingForDbUpgrade = -575 # TargetInstance specified for restore is not found or log files don't match BadRestoreTargetInstance = -577 # Soft recovery successfully replayed all operations, but the Undo phase of recovery was skipped RecoveredWithoutUndo = -579 # Databases to be restored are not from the same shadow copy backup DatabasesNotFromSameSnapshot = -580 # Soft recovery on a database from a shadow copy backup set SoftRecoveryOnSnapshot = -581 # One or more logs that were committed to this database, are missing. These log files are required to maintain durable ACID semantics, but not required to maintain consistency if the JET_bitReplayIgnoreLostLogs bit is specified during recovery. CommittedLogFilesMissing = -582 # The physical sector size reported by the disk subsystem, is unsupported by ESE for a specific file type. SectorSizeNotSupported = -583 # Soft recovery successfully replayed all operations and intended to skip the Undo phase of recovery, but the Undo phase was not required RecoveredWithoutUndoDatabasesConsistent = -584 # One or more logs were found to be corrupt during recovery. These log files are required to maintain durable ACID semantics, but not required to maintain consistency if the JET_bitIgnoreLostLogs bit and JET_paramDeleteOutOfRangeLogs is specified during recovery. CommittedLogFileCorrupt = -586 # The previous log's accumulated segment checksum doesn't match the next log LogSequenceChecksumMismatch = -590 # Database divergence mismatch. Page was uninitialized on remote node, but initialized on local node. PageInitializedMismatch = -596 # Unicode translation buffer too small UnicodeTranslationBufferTooSmall = -601 # Unicode normalization failed UnicodeTranslationFail = -602 # OS does not provide support for Unicode normalisation (and no normalisation callback was specified) UnicodeNormalizationNotSupported = -603 # Can not validate the language UnicodeLanguageValidationFailure = -604 # Existing log file has bad signature ExistingLogFileHasBadSignature = -610 # Existing log file is not contiguous ExistingLogFileIsNotContiguous = -611 # Checksum error in log file during backup LogReadVerifyFailure = -612 # too many outstanding generations between checkpoint and current generation CheckpointDepthTooDeep = -614 # hard recovery attempted on a database that wasn't a backup database RestoreOfNonBackupDatabase = -615 # log truncation attempted but not all required logs were copied LogFileNotCopied = -616 # A surrogate backup is in progress. SurrogateBackupInProgress = -617 # Too many outstanding generations between JetBeginTransaction and current generation. TransactionTooLong = -618 # The specified JET_ENGINEFORMATVERSION value is too low to be supported by this version of ESE. EngineFormatVersionNoLongerSupportedTooLow = -619 # The specified JET_ENGINEFORMATVERSION value is too high, higher than this version of ESE knows about. EngineFormatVersionNotYetImplementedTooHigh = -620 # Thrown by a format feature (not at JetSetSystemParameter) if the client requests a feature that requires a version higher than that set for the JET_paramEngineFormatVersion. EngineFormatVersionParamTooLowForRequestedFeature = -621 # The specified JET_ENGINEFORMATVERSION is set too low for this log stream, the log files have already been upgraded to a higher version. A higher JET_ENGINEFORMATVERSION value must be set in the param. EngineFormatVersionSpecifiedTooLowForLogVersion = -622 # The specified JET_ENGINEFORMATVERSION is set too low for this database file, the database file has already been upgraded to a higher version. A higher JET_ENGINEFORMATVERSION value must be set in the param. EngineFormatVersionSpecifiedTooLowForDatabaseVersion = -623 # Backup was aborted by server by calling JetTerm with JET_bitTermStopBackup or by calling JetStopBackup BackupAbortByServer = -801 # Invalid flags parameter InvalidGrbit = -900 # Termination in progress TermInProgress = -1000 # API not supported FeatureNotAvailable = -1001 # Invalid name InvalidName = -1002 # Invalid API parameter InvalidParameter = -1003 # Tried to attach a read-only database file for read/write operations DatabaseFileReadOnly = -1008 # Invalid database id InvalidDatabaseId = -1010 # Out of Memory OutOfMemory = -1011 # Maximum database size reached OutOfDatabaseSpace = -1012 # Out of table cursors OutOfCursors = -1013 # Out of database page buffers OutOfBuffers = -1014 # Too many indexes TooManyIndexes = -1015 # Too many columns in an index TooManyKeys = -1016 # Record has been deleted RecordDeleted = -1017 # Checksum error on a database page ReadVerifyFailure = -1018 # Blank database page PageNotInitialized = -1019 # Out of file handles OutOfFileHandles = -1020 # The OS returned ERROR_CRC from file IO DiskReadVerificationFailure = -1021 # Disk IO error DiskIO = -1022 # Invalid file path InvalidPath = -1023 # Invalid system path InvalidSystemPath = -1024 # Invalid log directory InvalidLogDirectory = -1025 # Record larger than maximum size RecordTooBig = -1026 # Too many open databases TooManyOpenDatabases = -1027 # Not a database file InvalidDatabase = -1028 # Database engine not initialized NotInitialized = -1029 # Database engine already initialized AlreadyInitialized = -1030 # Database engine is being initialized InitInProgress = -1031 # Cannot access file, the file is locked or in use FileAccessDenied = -1032 # Query support unavailable QueryNotSupported = -1034 # SQL Link support unavailable SQLLinkNotSupported = -1035 # Buffer is too small BufferTooSmall = -1038 # Too many columns defined TooManyColumns = -1040 # Container is not empty ContainerNotEmpty = -1043 # Filename is invalid InvalidFilename = -1044 # Invalid bookmark InvalidBookmark = -1045 # Column used in an index ColumnInUse = -1046 # Data buffer doesn't match column size InvalidBufferSize = -1047 # Cannot set column value ColumnNotUpdatable = -1048 # Index is in use IndexInUse = -1051 # Link support unavailable LinkNotSupported = -1052 # Null keys are disallowed on index NullKeyDisallowed = -1053 # Operation must be within a transaction NotInTransaction = -1054 # Transaction must rollback because failure of unversioned update MustRollback = -1057 # Too many active database users TooManyActiveUsers = -1059 # Invalid or unknown country/region code InvalidCountry = -1061 # Invalid or unknown language id InvalidLanguageId = -1062 # Invalid or unknown code page InvalidCodePage = -1063 # Invalid flags for LCMapString() InvalidLCMapStringFlags = -1064 # Attempted to create a version store entry (RCE) larger than a version bucket VersionStoreEntryTooBig = -1065 # Version store out of memory (and cleanup attempt failed to complete) VersionStoreOutOfMemoryAndCleanupTimedOut = -1066 # Version store out of memory (cleanup already attempted) VersionStoreOutOfMemory = -1069 # UNUSED: lCSRPerfFUCB * g_lCursorsMax exceeded (XJET only) CurrencyStackOutOfMemory = -1070 # Cannot index escrow column CannotIndex = -1071 # Record has not been deleted RecordNotDeleted = -1072 # Too many mempool entries requested TooManyMempoolEntries = -1073 # Out of btree ObjectIDs (perform offline defrag to reclaim freed/unused ObjectIds) OutOfObjectIDs = -1074 # Long-value ID counter has reached maximum value. (perform offline defrag to reclaim free/unused LongValueIDs) OutOfLongValueIDs = -1075 # Auto-increment counter has reached maximum value (offline defrag WILL NOT be able to reclaim free/unused Auto-increment values). OutOfAutoincrementValues = -1076 # Dbtime counter has reached maximum value (perform offline defrag to reclaim free/unused Dbtime values) OutOfDbtimeValues = -1077 # Sequential index counter has reached maximum value (perform offline defrag to reclaim free/unused SequentialIndex values) OutOfSequentialIndexValues = -1078 # Multi-instance call with single-instance mode enabled RunningInOneInstanceMode = -1080 # Single-instance call with multi-instance mode enabled RunningInMultiInstanceMode = -1081 # Global system parameters have already been set SystemParamsAlreadySet = -1082 # System path already used by another database instance SystemPathInUse = -1083 # Logfile path already used by another database instance LogFilePathInUse = -1084 # Temp path already used by another database instance TempPathInUse = -1085 # Instance Name already in use InstanceNameInUse = -1086 # Global system parameters have already been set, but to a conflicting or disagreeable state to the specified values. SystemParameterConflict = -1087 # This instance cannot be used because it encountered a fatal error InstanceUnavailable = -1090 # This database cannot be used because it encountered a fatal error DatabaseUnavailable = -1091 # This instance cannot be used because it encountered a log-disk-full error performing an operation (likely transaction rollback) that could not tolerate failure InstanceUnavailableDueToFatalLogDiskFull = -1092 # This JET_sesparam* identifier is not known to the ESE engine. InvalidSesparamId = -1093 # Out of sessions OutOfSessions = -1101 # Write lock failed due to outstanding write lock WriteConflict = -1102 # Transactions nested too deeply TransTooDeep = -1103 # Invalid session handle InvalidSesid = -1104 # Update attempted on uncommitted primary index WriteConflictPrimaryIndex = -1105 # Operation not allowed within a transaction InTransaction = -1108 # Must rollback current transaction -- cannot commit or begin a new one RollbackRequired = -1109 # Read-only transaction tried to modify the database TransReadOnly = -1110 # Attempt to replace the same record by two diffrerent cursors in the same session SessionWriteConflict = -1111 # record would be too big if represented in a database format from a previous version of Jet RecordTooBigForBackwardCompatibility = -1112 # The temp table could not be created due to parameters that conflict with JET_bitTTForwardOnly CannotMaterializeForwardOnlySort = -1113 # This session handle can't be used with this table id SesidTableIdMismatch = -1114 # Invalid instance handle InvalidInstance = -1115 # The instance was shutdown successfully but all the attached databases were left in a dirty state by request via JET_bitTermDirty DirtyShutdown = -1116 # The database page read from disk had the wrong page number. ReadPgnoVerifyFailure = -1118 # The database page read from disk had a previous write not represented on the page. ReadLostFlushVerifyFailure = -1119 # File system operation failed with an error indicating the file system is corrupt. FileSystemCorruption = -1121 # One or more database pages read from disk during recovery do not match the expected state. RecoveryVerifyFailure = -1123 # Attempted to provide a filter to JetSetCursorFilter() in an unsupported scenario. FilteredMoveNotSupported = -1124 # Attempted to PrepareToCommit a distributed transaction to non-zero level MustCommitDistributedTransactionToLevel0 = -1150 # Attempted a write-operation after a distributed transaction has called PrepareToCommit DistributedTransactionAlreadyPreparedToCommit = -1151 # Attempted to PrepareToCommit a non-distributed transaction NotInDistributedTransaction = -1152 # Attempted to commit a distributed transaction, but PrepareToCommit has not yet been called DistributedTransactionNotYetPreparedToCommit = -1153 # Attempted to begin a distributed transaction when not at level 0 CannotNestDistributedTransactions = -1154 # Attempted to begin a distributed transaction but no callback for DTC coordination was specified on initialisation DTCMissingCallback = -1160 # Attempted to recover a distributed transaction but no callback for DTC coordination was specified on initialisation DTCMissingCallbackOnRecovery = -1161 # Unexpected error code returned from DTC callback DTCCallbackUnexpectedError = -1162 # Database already exists DatabaseDuplicate = -1201 # Database in use DatabaseInUse = -1202 # No such database DatabaseNotFound = -1203 # Invalid database name DatabaseInvalidName = -1204 # Invalid number of pages DatabaseInvalidPages = -1205 # Non database file or corrupted db DatabaseCorrupted = -1206 # Database exclusively locked DatabaseLocked = -1207 # Cannot disable versioning for this database CannotDisableVersioning = -1208 # Database engine is incompatible with database InvalidDatabaseVersion = -1209 # The database is in an older (200) format Database200Format = -1210 # The database is in an older (400) format Database400Format = -1211 # The database is in an older (500) format Database500Format = -1212 # The database page size does not match the engine PageSizeMismatch = -1213 # Cannot start any more database instances TooManyInstances = -1214 # A different database instance is using this database DatabaseSharingViolation = -1215 # An outstanding database attachment has been detected at the start or end of recovery, but database is missing or does not match attachment info AttachedDatabaseMismatch = -1216 # Specified path to database file is illegal DatabaseInvalidPath = -1217 # A database is being assigned an id already in use DatabaseIdInUse = -1218 # Force Detach allowed only after normal detach errored out ForceDetachNotAllowed = -1219 # Corruption detected in catalog CatalogCorrupted = -1220 # Database is partially attached. Cannot complete attach operation PartiallyAttachedDB = -1221 # Database with same signature in use DatabaseSignInUse = -1222 # Corrupted db but repair not allowed DatabaseCorruptedNoRepair = -1224 # recovery tried to replay a database creation, but the database was originally created with an incompatible (likely older) version of the database engine InvalidCreateDbVersion = -1225 # The database cannot be attached because it is currently being rebuilt as part of an incremental reseed. DatabaseIncompleteIncrementalReseed = -1226 # The database is not a valid state to perform an incremental reseed. DatabaseInvalidIncrementalReseed = -1227 # The incremental reseed being performed on the specified database cannot be completed due to a fatal error. A full reseed is required to recover this database. DatabaseFailedIncrementalReseed = -1228 # The incremental reseed being performed on the specified database cannot be completed because the min required log contains no attachment info. A full reseed is required to recover this database. NoAttachmentsFailedIncrementalReseed = -1229 # Recovery on this database has not yet completed enough to permit access. DatabaseNotReady = -1230 # Database is attached but only for recovery. It must be explicitly attached before it can be opened. DatabaseAttachedForRecovery = -1231 # Recovery has not seen any Begin0/Commit0 records and so does not know what trxBegin0 to assign to this transaction TransactionsNotReadyDuringRecovery = -1232 # Table is exclusively locked TableLocked = -1302 # Table already exists TableDuplicate = -1303 # Table is in use, cannot lock TableInUse = -1304 # No such table or object ObjectNotFound = -1305 # Bad file/index density DensityInvalid = -1307 # Table is not empty TableNotEmpty = -1308 # Invalid table id InvalidTableId = -1310 # Cannot open any more tables (cleanup already attempted) TooManyOpenTables = -1311 # Oper. not supported on table IllegalOperation = -1312 # Cannot open any more tables (cleanup attempt failed to complete) TooManyOpenTablesAndCleanupTimedOut = -1313 # Table or object name in use ObjectDuplicate = -1314 # Object is invalid for operation InvalidObject = -1316 # Use CloseTable instead of DeleteTable to delete temp table CannotDeleteTempTable = -1317 # Illegal attempt to delete a system table CannotDeleteSystemTable = -1318 # Illegal attempt to delete a template table CannotDeleteTemplateTable = -1319 # Must have exclusive lock on table. ExclusiveTableLockRequired = -1322 # DDL operations prohibited on this table FixedDDL = -1323 # On a derived table, DDL operations are prohibited on inherited portion of DDL FixedInheritedDDL = -1324 # Nesting of hierarchical DDL is not currently supported. CannotNestDDL = -1325 # Tried to inherit DDL from a table not marked as a template table. DDLNotInheritable = -1326 # System parameters were set improperly InvalidSettings = -1328 # Client has requested stop service ClientRequestToStopJetService = -1329 # Template table was created with NoFixedVarColumnsInDerivedTables CannotAddFixedVarColumnToDerivedTable = -1330 # Index build failed IndexCantBuild = -1401 # Primary index already defined IndexHasPrimary = -1402 # Index is already defined IndexDuplicate = -1403 # No such index IndexNotFound = -1404 # Cannot delete clustered index IndexMustStay = -1405 # Illegal index definition IndexInvalidDef = -1406 # Invalid create index description InvalidCreateIndex = -1409 # Out of index description blocks TooManyOpenIndexes = -1410 # Non-unique inter-record index keys generated for a multivalued index MultiValuedIndexViolation = -1411 # Failed to build a secondary index that properly reflects primary index IndexBuildCorrupted = -1412 # Primary index is corrupt. The database must be defragmented or the table deleted. PrimaryIndexCorrupted = -1413 # Secondary index is corrupt. The database must be defragmented or the affected index must be deleted. If the corrupt index is over Unicode text, a likely cause is a sort-order change. SecondaryIndexCorrupted = -1414 # Illegal index id InvalidIndexId = -1416 # tuple index can only be on a secondary index IndexTuplesSecondaryIndexOnly = -1430 # tuple index may only have eleven columns in the index IndexTuplesTooManyColumns = -1431 # tuple index must be a non-unique index IndexTuplesNonUniqueOnly = -1432 # tuple index must be on a text/binary column IndexTuplesTextBinaryColumnsOnly = -1433 # tuple index does not allow setting cbVarSegMac IndexTuplesVarSegMacNotAllowed = -1434 # invalid min/max tuple length or max characters to index specified IndexTuplesInvalidLimits = -1435 # cannot call RetrieveColumn() with RetrieveFromIndex on a tuple index IndexTuplesCannotRetrieveFromIndex = -1436 # specified key does not meet minimum tuple length IndexTuplesKeyTooSmall = -1437 # Specified LV chunk size is not supported InvalidLVChunkSize = -1438 # Only JET_coltypLongText and JET_coltypLongBinary columns without default values can be encrypted ColumnCannotBeEncrypted = -1439 # Cannot index encrypted column CannotIndexOnEncryptedColumn = -1440 # Column value is long ColumnLong = -1501 # No such chunk in long value ColumnNoChunk = -1502 # Field will not fit in record ColumnDoesNotFit = -1503 # Null not valid NullInvalid = -1504 # Column indexed, cannot delete ColumnIndexed = -1505 # Field length is greater than maximum ColumnTooBig = -1506 # No such column ColumnNotFound = -1507 # Field is already defined ColumnDuplicate = -1508 # Attempted to create a multi-valued column, but column was not Tagged MultiValuedColumnMustBeTagged = -1509 # Second autoincrement or version column ColumnRedundant = -1510 # Invalid column data type InvalidColumnType = -1511 # No non-NULL tagged columns TaggedNotNULL = -1514 # Invalid w/o a current index NoCurrentIndex = -1515 # The key is completely made KeyIsMade = -1516 # Column Id Incorrect BadColumnId = -1517 # Bad itagSequence for tagged column BadItagSequence = -1518 # Cannot delete, column participates in relationship ColumnInRelationship = -1519 # AutoIncrement and Version cannot be tagged CannotBeTagged = -1521 # Default value exceeds maximum size DefaultValueTooBig = -1524 # Duplicate detected on a unique multi-valued column MultiValuedDuplicate = -1525 # Corruption encountered in long-value tree LVCorrupted = -1526 # Duplicate detected on a unique multi-valued column after data was normalized, and normalizing truncated the data before comparison MultiValuedDuplicateAfterTruncation = -1528 # Invalid column in derived table DerivedColumnCorruption = -1529 # Tried to convert column to a primary index placeholder, but column doesn't meet necessary criteria InvalidPlaceholderColumn = -1530 # Only JET_coltypLongText and JET_coltypLongBinary columns can be compressed ColumnCannotBeCompressed = -1538 # Cannot retrieve/set encrypted column without an encryption key ColumnNoEncryptionKey = -1540 # The key was not found RecordNotFound = -1601 # No working buffer RecordNoCopy = -1602 # Currently not on a record NoCurrentRecord = -1603 # Primary key may not change RecordPrimaryChanged = -1604 # Illegal duplicate key KeyDuplicate = -1605 # Attempted to update record when record update was already in progress AlreadyPrepared = -1607 # No call to JetMakeKey KeyNotMade = -1608 # No call to JetPrepareUpdate UpdateNotPrepared = -1609 # Data has changed, operation aborted DataHasChanged = -1611 # Windows installation does not support language LanguageNotSupported = -1619 # Internal error: data could not be decompressed DecompressionFailed = -1620 # No version updates only for uncommitted tables UpdateMustVersion = -1621 # Data could not be decrypted DecryptionFailed = -1622 # Cannot encrypt tagged columns with itag>1 EncryptionBadItag = -1623 # Too many sort processes TooManySorts = -1701 # Invalid operation on Sort InvalidOnSort = -1702 # Temp file could not be opened TempFileOpenError = -1803 # Too many open databases TooManyAttachedDatabases = -1805 # No space left on disk DiskFull = -1808 # Permission denied PermissionDenied = -1809 # File not found FileNotFound = -1811 # Invalid file type FileInvalidType = -1812 # File already exists FileAlreadyExists = -1814 # Cannot Restore after init. AfterInitialization = -1850 # Logs could not be interpreted LogCorrupted = -1852 # Invalid operation InvalidOperation = -1906 # Access denied AccessDenied = -1907 # Infinite split TooManySplits = -1909 # Multiple threads are using the same session SessionSharingViolation = -1910 # An entry point in a DLL we require could not be found EntryPointNotFound = -1911 # Specified session already has a session context set SessionContextAlreadySet = -1912 # Tried to reset session context, but current thread did not orignally set the session context SessionContextNotSetByThisThread = -1913 # Tried to terminate session in use SessionInUse = -1914 # Internal error during dynamic record format conversion RecordFormatConversionFailed = -1915 # Just one open user database per session is allowed (JET_paramOneDatabasePerSession) OneDatabasePerSession = -1916 # error during rollback RollbackError = -1917 # The version of the persisted flush map is not supported by this version of the engine. FlushMapVersionUnsupported = -1918 # The persisted flush map and the database do not match. FlushMapDatabaseMismatch = -1919 # The persisted flush map cannot be reconstructed. FlushMapUnrecoverable = -1920 # The operation did not complete successfully because the database is already running maintenance on specified database DatabaseAlreadyRunningMaintenance = -2004 # A callback failed CallbackFailed = -2101 # A callback function could not be found CallbackNotResolved = -2102 # An element of the JET space hints structure was not correct or actionable. SpaceHintsInvalid = -2103 # OS Shadow copy API used in an invalid sequence OSSnapshotInvalidSequence = -2401 # OS Shadow copy ended with time-out OSSnapshotTimeOut = -2402 # OS Shadow copy not allowed (backup or recovery in progress) OSSnapshotNotAllowed = -2403 # invalid JET_OSSNAPID OSSnapshotInvalidSnapId = -2404 # Internal test injection limit hit TooManyTestInjections = -2501 # Test injection not supported TestInjectionNotSupported = -2502 # Some how the log data provided got out of sequence with the current state of the instance InvalidLogDataSequence = -2601 # Attempted to use Local Storage without a callback function being specified LSCallbackNotSpecified = -3000 # Attempted to set Local Storage for an object which already had it set LSAlreadySet = -3001 # Attempted to retrieve Local Storage from an object which didn't have it set LSNotSet = -3002 # an I/O was issued to a location that was sparse FileIOSparse = -4000 # a read was issued to a location beyond EOF (writes will expand the file) FileIOBeyondEOF = -4001 # instructs the JET_ABORTRETRYFAILCALLBACK caller to abort the specified I/O FileIOAbort = -4002 # instructs the JET_ABORTRETRYFAILCALLBACK caller to retry the specified I/O FileIORetry = -4003 # instructs the JET_ABORTRETRYFAILCALLBACK caller to fail the specified I/O FileIOFail = -4004 # read/write access is not supported on compressed files FileCompressed = -4005 #endregion pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_filetype.py000077500000000000000000000007431513773544400274210ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_filetype.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_filetype(Enum): """ JET_filetype Esent file types. """ # Unknown file. Unknown = 0 # Database file. Database = 1 # Transaction log. Log = 3 # Checkpoint file. Checkpoint = 4 # Temporary database. TempDatabase = 5 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_objtyp.py000077500000000000000000000005511513773544400271040ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_objtyp.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_objtyp(Enum): """ JET_objtyp Type of an ESENT object. """ # Invalid object type. Nil = 0 # Object is a table. Table = 1 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_param.py000077500000000000000000000461601513773544400267030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_param.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_param(Enum): """ JET_param ESENT system parameters. This list is not extensive. Some parameters introduced later are in different classes, such as , , or . is usually used with , , , and . Some of these parameters are exposed with the helper classes and . """ # This parameter indicates the relative or absolute file system path of the # folder that will contain the checkpoint file for the instance. The path # must be terminated with a backslash character, which indicates that the # target path is a folder. SystemPath = 0 # This parameter indicates the relative or absolute file system path of # the folder or file that will contain the temporary database for the instance. # If the path is to a folder that will contain the temporary database then it # must be terminated with a backslash character. TempPath = 1 # This parameter indicates the relative or absolute file system path of the # folder that will contain the transaction logs for the instance. The path must # be terminated with a backslash character, which indicates that the target path # is a folder. LogFilePath = 2 # This parameter sets the three letter prefix used for many of the files used by # the database engine. For example, the checkpoint file is called EDB.CHK by # default because EDB is the default base name. BaseName = 3 # This parameter supplies an application specific string that will be added to # any event log messages that are emitted by the database engine. This allows # easy correlation of event log messages with the source application. By default # the host application executable name will be used. EventSource = 4 # This parameter reserves the requested number of session resources for use by an # instance. A session resource directly corresponds to a JET_SESID data type. # This setting will affect how many sessions can be used at the same time. MaxSessions = 5 # This parameter reserves the requested number of B+ Tree resources for use by # an instance. This setting will affect how many tables can be used at the same time. MaxOpenTables = 6, # PreferredMaxOpenTables(7) is obsolete # This parameter reserves the requested number of cursor resources for use by an # instance. A cursor resource directly corresponds to a JET_TABLEID data type. # This setting will affect how many cursors can be used at the same time. A cursor # resource cannot be shared by different sessions so this parameter must be set to # a large enough value so that each session can use as many cursors as are required. MaxCursors = 8 # This parameter reserves the requested number of version store pages for use by an instance. MaxVerPages = 9 # This parameter reserves the requested number of temporary table resources for use # by an instance. This setting will affect how many temporary tables can be used at # the same time. If this system parameter is set to zero then no temporary database # will be created and any activity that requires use of the temporary database will # fail. This setting can be useful to avoid the I/O required to create the temporary # database if it is known that it will not be used. # The use of a temporary table also requires a cursor resource. MaxTemporaryTables = 10 # This parameter will configure the size of the transaction log files. Each # transaction log file is a fixed size. The size is equal to the setting of # this system parameter in units of 1024 bytes. LogFileSize = 11 # This parameter will configure the amount of memory used to cache log records # before they are written to the transaction log file. The unit for this # parameter is the sector size of the volume that holds the transaction log files. # The sector size is almost always 512 bytes, so it is safe to assume that size # for the unit. This parameter has an impact on performance. When the database # engine is under heavy update load, this buffer can become full very rapidly. # A larger cache size for the transaction log file is critical for good update # performance under such a high load condition. The default is known to be too small # for this case. # Do not set this parameter to a number of buffers that is larger (in bytes) than # half the size of a transaction log file. LogBuffers = 12 # This parameter configures how transaction log files are managed by the database # engine. When circular logging is off, all transaction log files that are generated # are retained on disk until they are no longer needed because a full backup of the # database has been performed. When circular logging is on, only transaction log files # that are younger than the current checkpoint are retained on disk. The benefit of # this mode is that backups are not required to retire old transaction log files. CircularLog = 17 # This parameter controls the amount of space that is added to a database file each # time it needs to grow to accommodate more data. The size is in database pages. DbExtensionSize = 18 # This parameter controls the initial size of the temporary database. The size is in # database pages. A size of zero indicates that the default size of an ordinary # database should be used. It is often desirable for small applications to configure # the temporary database to be as small as possible. Setting this parameter to # SystemParameters.PageTempDBSmallest will achieve the smallest temporary database possible. PageTempDBMin = 19 # This parameter configures the maximum size of the database page cache. The size # is in database pages. If this parameter is left to its default value, then the # maximum size of the cache will be set to the size of physical memory when JetInit # is called. CacheSizeMax = 23 # This parameter controls how aggressively database pages are flushed from the # database page cache to minimize the amount of time it will take to recover from a # crash. The parameter is a threshold in bytes for about how many transaction log # files will need to be replayed after a crash. If circular logging is enabled using # JET_param.CircularLog then this parameter will also control the approximate amount # of transaction log files that will be retained on disk. CheckpointDepthMax = 24 # This parameter controls the correlation interval of ESE's LRU-K page replacement # algorithm. LrukCorrInterval = 25 # This parameter controls the timeout interval of ESE's LRU-K page replacement # algorithm. LrukTimeout = 28 # This parameter controls how many database file I/Os can be queued # per-disk in the host operating system at one time. A larger value # for this parameter can significantly help the performance of a large # database application. OutstandingIOMax = 30 # This parameter controls when the database page cache begins evicting pages from the # cache to make room for pages that are not cached. When the number of page buffers in the cache # drops below this threshold then a background process will be started to replenish that pool # of available buffers. This threshold is always relative to the maximum cache size as set by # JET_paramCacheSizeMax. This threshold must also always be less than the stop threshold as # set by JET_paramStopFlushThreshold. # The distance height of the start threshold will determine the response time that the database # page cache must have to produce available buffers before the application needs them. A high # start threshold will give the background process more time to react. However, a high start # threshold implies a higher stop threshold and that will reduce the effective size of the # database page cache for modified pages (Windows 2000) or for all pages (Windows XP and later). StartFlushThreshold = 31 # This parameter controls when the database page cache ends evicting pages from the cache to make # room for pages that are not cached. When the number of page buffers in the cache rises above # this threshold then the background process that was started to replenish that pool of available # buffers is stopped. This threshold is always relative to the maximum cache size as set by # JET_paramCacheSizeMax. This threshold must also always be greater than the start threshold # as set by JET_paramStartFlushThreshold. # The distance between the start threshold and the stop threshold affects the efficiency with # which database pages are flushed by the background process. A larger gap will make it # more likely that writes to neighboring pages may be combined. However, a high stop # threshold will reduce the effective size of the database page cache for modified # pages (Windows 2000) or for all pages (Windows XP and later). StopFlushThreshold = 32 # This parameter is the master switch that controls crash recovery for an instance. # If this parameter is set to "On" then ARIES style recovery will be used to bring all # databases in the instance to a consistent state in the event of a process or machine # crash. If this parameter is set to "Off" then all databases in the instance will be # managed without the benefit of crash recovery. That is to say, that if the instance # is not shut down cleanly using JetTerm prior to the process exiting or machine shutdown # then the contents of all databases in that instance will be corrupted. Recovery = 34 # This parameter controls the behavior of online defragmentation when initiated using # and . EnableOnlineDefrag = 35 # This parameter can be used to control the size of the database page cache at run time. # Ordinarily, the cache will automatically tune its size as a function of database and # machine activity levels. If the application sets this parameter to zero, then the cache # will tune its own size in this manner. However, if the application sets this parameter # to a non-zero value then the cache will adjust itself to that target size. CacheSize = 41 # When this parameter is true, every database is checked at JetAttachDatabase time for # indexes over Unicode key columns that were built using an older version of the NLS # library in the operating system. This must be done because the database engine persists # the sort keys generated by LCMapStringW and the value of these sort keys change from release to release. # If a primary index is detected to be in this state then JetAttachDatabase will always fail with # JET_err.PrimaryIndexCorrupted. # If any secondary indexes are detected to be in this state then there are two possible outcomes. # If AttachDatabaseGrbit.DeleteCorruptIndexes was passed to JetAttachDatabase then these indexes # will be deleted and JET_wrnCorruptIndexDeleted will be returned from JetAttachDatabase. These # indexes will need to be recreated by your application. If AttachDatabaseGrbit.DeleteCorruptIndexes # was not passed to JetAttachDatabase then the call will fail with JET_errSecondaryIndexCorrupted. EnableIndexChecking = 45 # This parameter can be used to control which event log the database engine uses for its event log # messages. By default, all event log messages will go to the Application event log. If the registry # key name for another event log is configured then the event log messages will go there instead. EventSourceKey = 49 # When this parameter is true, informational event log messages that would ordinarily be generated by # the database engine will be suppressed. NoInformationEvent = 50 # Configures the detail level of eventlog messages that are emitted # to the eventlog by the database engine. Higher numbers will result # in more detailed eventlog messages. EventLoggingLevel = 51 # Delete the log files that are not matching (generation wise) during soft recovery. DeleteOutOfRangeLogs = 52 # After Windows 7, it was discovered that JET_paramEnableIndexCleanup had some implementation limitations, reducing its effectiveness. # Rather than update it to work with locale names, the functionality is removed altogether. # Unfortunately JET_paramEnableIndexCleanup can not be ignored altogether. JET_paramEnableIndexChecking defaults to false, so if # JET_paramEnableIndexCleanup were to be removed entirely, then by default there were would be no checks for NLS changes! # The current behavious (when enabled) is to track the language sort versions for the indices, and when the sort version for that # particular locale changes, the engine knows which indices are now invalid. For example, if the sort version for only "de-de" changes, # then the "de-de" indices are invalid, but the "en-us" indices will be fine. # Post-Windows 8: # JET_paramEnableIndexChecking accepts JET_INDEXCHECKING (which is an enum). The values of '0' and '1' have the same meaning as before, # but '2' is JET_IndexCheckingDeferToOpenTable, which means that the NLS up-to-date-ness is NOT checked when the database is attached. # It is deferred to JetOpenTable(), which may now fail with JET_errPrimaryIndexCorrupted or JET_errSecondaryIndexCorrupted (which # are NOT actual corruptions, but instead reflect an NLS sort change). # IN SUMMARY: # New code should explicitly set both IndexChecking and IndexCleanup to the same value. EnableIndexCleanup = 54 # This parameter configures the minimum size of the database page cache. The size is in database pages. CacheSizeMin = 60 # This parameter represents a threshold relative to that controls # the discretionary use of version pages by the database engine. If the size of the version store exceeds # this threshold then any information that is only used for optional background tasks, such as reclaiming # deleted space in the database, is instead sacrificed to preserve room for transactional information. PreferredVerPages = 63 # This parameter configures the page size for the database. The page # size is the smallest unit of space allocation possible for a database # file. The database page size is also very important because it sets # the upper limit on the size of an individual record in the database. # # Only one database page size is supported per process at this time. # This means that if you are in a single process that contains different # applications that use the database engine then they must all agree on # a database page size. # DatabasePageSize = 64 # This parameter disables all database engine callbacks to application provided functions. # It is primarily intended to support the database engine utilities and is not intended to be used in your application. DisableCallbacks = 65 # This parameter can be used to convert a JET_ERR into a string. # This should only be used with JetGetSystemParameter. ErrorToString = 70 # Configures the engine with a delegate. # This callback may be called for the following reasons: # , # or . See # for more information. This parameter cannot currently be retrieved. RuntimeCallback = 73 # This parameter controls the outcome of JetInit when the database # engine is configured to start using transaction log files on disk # that are of a different size than what is configured. Normally, # will successfully recover the databases # but will fail with # to indicate that the log file size is misconfigured. However, when # this parameter is set to true then the database engine will silently # delete all the old log files, start a new set of transaction log files # using the configured log file size. This parameter is useful when the # application wishes to transparently change its transaction log file # size yet still work transparently in upgrade and restore scenarios. CleanupMismatchedLogFiles = 77 # This parameter controls what happens when an exception is thrown by the # database engine or code that is called by the database engine. When set # to JET_ExceptionMsgBox, any exception will be thrown to the Windows unhandled # exception filter. This will result in the exception being handled as an # application failure. The intent is to prevent application code from erroneously # trying to catch and ignore an exception generated by the database engine. # This cannot be allowed because database corruption could occur. If the application # wishes to properly handle these exceptions then the protection can be disabled # by setting this parameter to JET_ExceptionNone. ExceptionAction = 98 # When this parameter is set to true then any folder that is missing in a file system path in use by # the database engine will be silently created. Otherwise, the operation that uses the missing file system # path will fail with JET_err.InvalidPath. CreatePathIfNotExist = 100 # When this parameter is true then only one database is allowed to # be opened using JetOpenDatabase by a given session at one time. # The temporary database is excluded from this restriction. OneDatabasePerSession = 102 # This parameter controls the maximum number of instances that can be created in a single process. MaxInstances = 104 # This parameter controls the number of background cleanup work items that # can be queued to the database engine thread pool at any one time. VersionStoreTaskQueueMax = 105 # This parameter controls whether perfmon counters should be enabled or not. # By default, perfmon counters are enabled, but there is memory overhead for enabling # them. DisablePerfmon = 107 # If you can not find the parameter you are expecting here, then perhaps it is # in a later version of the API, in VistaParam, Windows7Param, etc. pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_prep.py000077500000000000000000000036571513773544400265550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_prep.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_prep(Enum): """ JET_prep Update types for JetPrepareUpdate. """ # This flag causes the cursor to prepare for an insert of a new record. # All the data is initialized to the default state for the record. # If the table has an auto-increment column, then a new value is # assigned to this record regardless of whether the update ultimately # succeeds, fails or is cancelled. Insert = 0 # This flag causes the cursor to prepare for a replace of the current # record. If the table has a version column, then the version column # is set to the next value in its sequence. If this update does not # complete, then the version value in the record will be unaffected. # An update lock is taken on the record to prevent other sessions # from updating this record before this session completes. Replace = 2 # This flag causes JetPrepareUpdate to cancel the update for this cursor. Cancel = 3 # This flag is similar to JET_prepReplace, but no lock is taken to prevent # other sessions from updating this record. Instead, this session may receive # JET_errWriteConflict when it calls JetUpdate to complete the update. ReplaceNoLock = 4 # This flag causes the cursor to prepare for an insert of a copy of the # existing record. There must be a current record if this option is used. # The initial state of the new record is copied from the current record. # Long values that are stored off-record are virtually copied. InsertCopy = 5 # This flag causes the cursor to prepare for an insert of the same record, # and a delete or the original record. It is used in cases in which the # primary key has changed. InsertCopyDeleteOriginal = 7 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_sesparam.py000077500000000000000000000015351513773544400274130ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_sesparam.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_sesparam(Enum): """ JET_sesparam ESENT session parameters. """ # This parameter is not meant to be used. Base = 4096 # This parameter sets the grbits for commit. It is functionally the same as the # system parameter JET_param.CommitDefault when used with an instance and a sesid. # Note: JET_param.CommitDefault is not currently exposed in the ESE interop layer. CommitDefault = Base + 1 # This parameter sets a user specific commit context that will be placed in the # transaction log on commit to level 0. CommitGenericContext = Base + 2 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/JET_wrn.py000077500000000000000000000120501513773544400264000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : JET_wrn.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class JET_wrn(Enum): """ JET_wrn ESENT warning codes. """ # Successful operation. Success = 0 # The version store is still active RemainingVersions = 321 # seek on non-unique index yielded a unique key UniqueKey = 345 # Column is a separated long-value SeparateLongValue = 406 # No more records to stream NoMoreRecords = 428 # Existing log file has bad signature ExistingLogFileHasBadSignature = 558 # Existing log file is not contiguous ExistingLogFileIsNotContiguous = 559 # INTERNAL ERROR SkipThisRecord = 564 # TargetInstance specified for restore is running TargetInstanceRunning = 578 # One or more logs that were committed to this database, were not recovered. The database is still clean/consistent, as though the lost log's transactions were committed lazily (and lost). CommittedLogFilesLost = 585 # One or more logs that were committed to this database, were no recovered. The database is still clean/consistent, as though the corrupted log's transactions were committed lazily (and lost). CommittedLogFilesRemoved = 587 # Signal used by clients to indicate JetInit() finished with undo FinishWithUndo = 588 # Database corruption has been repaired DatabaseRepaired = 595 # Column is NULL-valued ColumnNull = 1004 # Buffer too small for data BufferTruncated = 1006 # Database is already attached DatabaseAttached = 1007 # Sort does not fit in memory SortOverflow = 1009 # Exact match not found during seek SeekNotEqual = 1039 # No extended error information NoErrorInfo = 1055 # No idle activity occured NoIdleActivity = 1058 # No write lock at transaction level 0 NoWriteLock = 1067 # Column set to NULL-value ColumnSetNull = 1068 # Database file could not be shrunk because there is not enough internal free space available or there is unmovable data present. ShrinkNotPossible = 1122 # Warning code DTC callback should return if the specified transaction is to be committed DTCCommitTransaction = 1163 # Warning code DTC callback should return if the specified transaction is to be rolled back DTCRollbackTransaction = 1164 # Opened an empty table TableEmpty = 1301 # System cleanup has a cursor open on the table TableInUseBySystem = 1327 # Out of date index removed CorruptIndexDeleted = 1415 # The Primary index is created with an incompatible OS sort version. The table can not be safely modified. PrimaryIndexOutOfDate = 1417 # One or more Secondary index is created with an incompatible OS sort version. Any index over Unicode text should be deleted. SecondaryIndexOutOfDate = 1418 # Max length too big, truncated ColumnMaxTruncated = 1512 # Single instance column bursted CopyLongValue = 1520 # RetrieveTaggedColumnList ran out of copy buffer before retrieving all tagged columns TaggedColumnsRemaining = 1523 # Column value(s) not returned because the corresponding column id or itagSequence requested for enumeration was null ColumnSkipped = 1531 # Column value(s) not returned because they could not be reconstructed from the data at hand ColumnNotLocal = 1532 # Column values exist that were not requested for enumeration ColumnMoreTags = 1533 # Column value truncated at the requested size limit during enumeration ColumnTruncated = 1534 # Column values exist but were not returned by request ColumnPresent = 1535 # Column value returned in JET_COLUMNENUM as a result of JET_bitEnumerateCompressOutput ColumnSingleValue = 1536 # Column value(s) not returned because they were set to their default value(s) and JET_bitEnumerateIgnoreDefault was specified ColumnDefault = 1537 # Column value(s) not returned because they could not be reconstructed from the data in the record ColumnNotInRecord = 1539 # Column value returned as a reference because it could not be reconstructed from the data in the record ColumnReference = 1541 # Data has changed DataHasChanged = 1610 # Moved to new key KeyChanged = 1618 # Database file is read only FileOpenReadOnly = 1813 # Idle registry full IdleFull = 1908 # Online defrag already running on specified database DefragAlreadyRunning = 2000 # Online defrag not running on specified database DefragNotRunning = 2001 # JetDatabaseScan already running on specified database DatabaseScanAlreadyRunning = 2002 # JetDatabaseScan not running on specified database DatabaseScanNotRunning = 2003 # Unregistered a non-existant callback function CallbackNotRegistered = 2100 # The log data provided jumped to the next log suddenly, we have deleted the incomplete log file as a precautionary measure PreviousLogFileIncomplete = 2602 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/LegacyFileNames.py000077500000000000000000000013741513773544400300670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : LegacyFileNames.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class LegacyFileNames(Enum): """ LegacyFileNames Options for LegacyFileNames. """ # When this option is present then the database engine will use the following naming conventions for its files: # o Transaction Log files will use .LOG for their file extension. # o Checkpoint files will use .CHK for their file extension. ESE98FileNames = 0x00000001 # Preserve the 8.3 naming syntax for as long as possible. (this should not be changed, w/o ensuring there are no log files). EightDotThreeSoftCompat = 0x00000002 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/ObjectInfoFlags.py000077500000000000000000000022661513773544400300770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : ObjectInfoFlags.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class ObjectInfoFlags(Enum): """ ObjectInfoFlags Flags for ESENT objects (tables). Used in . """ # Default options. NONE = 0 # Object is for internal use only. System = -2147483648 # 0x80000000 # It's possible to use bit shift to avoid triggering fxcop CA2217. # System = (0x1 << 31) # 0x80000000 # (http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/a44aa5c1-c62a-46b7-8009-dc46ba21ba93) # But we don't want to change the type of the enum to a long. # Table's DDL is fixed. TableFixedDDL = 0x40000000 # Table's DDL is inheritable. TableTemplate = 0x20000000 # Table's DDL is inherited from a template table. TableDerived = 0x10000000 # Fixed or variable columns in derived tables (so that fixed or variable # columns can be added to the template in the future). # Used in conjunction with . TableNoFixedVarColumnsInDerivedTables = 0x04000000 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/ObjectInfoGrbit.py000077500000000000000000000007461513773544400301130ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : ObjectInfoGrbit.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class ObjectInfoGrbit(Enum): """ ObjectInfoGrbit Table options, used in . """ # The table can have bookmarks. Bookmark = 0x1 # The table can be rolled back. Rollback = 0x2 # The table can be updated. Updatable = 0x4 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/Server2003Grbits.py000077500000000000000000000060331513773544400300220ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : Server2003Grbits.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum from dsinternals.microsoft.isam.esent.interop.grbits import * class SnapshotAbortGrbit(Enum): """ SnapshotAbortGrbit Options for . """ # Default options. NONE = 0 class UpdateGrbit(Enum): """ UpdateGrbit Options for . """ # Default options. NONE = 0 # This flag causes the update to return an error if the update would # not have been possible in the Windows 2000 version of ESE, which # enforced a smaller maximum number of multi-valued column instances # in each record than later versions of ESE. This is important only # for applications that wish to replicate data between applications # hosted on Windows 2000 and applications hosted on Windows # 2003, or later versions of ESE. It should not be necessary for most # applications. CheckESE97Compatibility = 0x1 # Grbits that have been added to the Windows Server 2003 version of ESENT. class Server2003Grbits(object): """ Server2003Grbits """ # Delete all indexes with unicode columns. DeleteUnicodeIndexes = AttachDatabaseGrbit(0x400) # This is a finalizable column (delete record if escrow value equals 0). ColumnDeleteOnZero = ColumndefGrbit(0x20000) # This option requests that the temporary table only be created if the # temporary table manager can use the implementation optimized for # intermediate query results. If any characteristic of the temporary # table would prevent the use of this optimization then the operation # will fail with JET_errCannotMaterializeForwardOnlySort. A side effect # of this option is to allow the temporary table to contain records # with duplicate index keys. See # for more information. ForwardOnly = TempTableGrbit(0x40) # If a given column is not present in the record and it has a user # defined default value then no column value will be returned. # This option will prevent the callback that computes the user defined # default value for the column from being called when enumerating # the values for that column. # # This option is only available for Windows Server 2003 SP1 and later # operating systems. # EnumerateIgnoreUserDefinedDefault = EnumerateColumnsGrbit(0x00100000) # All transactions previously committed by any session that have not # yet been flushed to the transaction log file will be flushed immediately. # This API will wait until the transactions have been flushed before # returning to the caller. This option may be used even if the session # is not currently in a transaction. This option cannot be used in # combination with any other option. WaitAllLevel0Commit = CommitTransactionGrbit(0x8) pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/VistaGrbits.py000077500000000000000000000105721513773544400273400ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : VistaGrbits.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum from dsinternals.microsoft.isam.esent.interop.grbits import * class SnapshotEndGrbit(Enum): """ SnapshotEndGrbit Options for . """ # Default options. NONE = 0 # The snapshot session aborted. AbortSnapshot = 0x1 class SnapshotPrepareInstanceGrbit(Enum): """ SnapshotPrepareInstanceGrbit Options for . """ # Default options. NONE = 0 class SnapshotTruncateLogGrbit(Enum): """ SnapshotTruncateLogGrbit Options for and . """ # No truncation will occur. NONE = 0 # All the databases are attached so the storage engine can compute # and do the log truncation. AllDatabasesSnapshot = 0x1 class SnapshotGetFreezeInfoGrbit(Enum): """ SnapshotGetFreezeInfoGrbit Options for . """ # Default options. NONE = 0 class JET_InstanceMiscInfo(Enum): """ JET_InstanceMiscInfo Information levels for . """ # Get the signature of the transaction log associated with this sequence. LogSignature = 0 class VistaGrbits(Enum): """ VistaGrbits Grbits that have been added to the Vista version of ESENT. """ # Specifying this flag for an index that has more than one key column # that is a multi-valued column will result in an index entry being # created for each result of a cross product of all the values in # those key columns. Otherwise, the index would only have one entry # for each multi-value in the most significant key column that is a # multi-valued column and each of those index entries would use the # first multi-value from any other key columns that are multi-valued columns. # # For example, if you specified this flag for an index over column # A that has the values "red" and "blue" and over column B that has # the values "1" and "2" then the following index entries would be # created: "red", "1"; "red", "2"; "blue", "1"; "blue", "2". Otherwise, # the following index entries would be created: "red", "1"; "blue", "1". # IndexCrossProduct = CreateIndexGrbit(0x4000) # Specifying this flag will cause any update to the index that would # result in a truncated key to fail with . # Otherwise, keys will be silently truncated. IndexDisallowTruncation = CreateIndexGrbit(0x10000) # Index over multiple multi-valued columns but only with values of same itagSequence. IndexNestedTable = CreateIndexGrbit(0x20000) # The engine can mark the database headers as appropriate (for example, # a full backup completed), even though the call to truncate was not completed. TruncateDone = EndExternalBackupGrbit(0x100) # Perform recovery, but halt at the Undo phase. Allows whatever logs are present to # be replayed, then later additional logs can be copied and replayed. RecoveryWithoutUndo = InitGrbit(0x8) # On successful soft recovery, truncate log files. TruncateLogsAfterRecovery = InitGrbit(0x00000010) # Missing database map entry default to same location. ReplayMissingMapEntryDB = InitGrbit(0x00000020) # Transaction logs must exist in the log file directory # (i.e. can't auto-start a new stream). LogStreamMustExist = InitGrbit(0x40) # The snapshot session continues after JetOSSnapshotThaw and will # require a JetOSSnapshotEnd function call. ContinueAfterThaw = SnapshotPrepareGrbit(0x4) # Specifying this flag will cause the index to use the maximum key size # specified in the cbKeyMost field in the structure. Otherwise, the # index will use JET_cbKeyMost (255) as its maximum key size. # Set internally when the NATIVE_INDEXCREATE structure is generated. IndexKeyMost = CreateIndexGrbit(0x8000) # LCID field of JET_INDEXCREATE actually points to a JET_UNICODEINDEX # struct to allow user-defined LCMapString() flags. IndexUnicode = CreateIndexGrbit(0x00000800) pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/Windows7Grbits.py000077500000000000000000000072341513773544400277740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : Windows7Grbits.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum from dsinternals.microsoft.isam.esent.interop.grbits import * class CrashDumpGrbit(Enum): """ CrashDumpGrbit Options for . """ # Default options. NONE = 0 # Dump minimum includes . Minimum = 0x1 # Dump maximum includes . Maximum = 0x2 # CacheMinimum includes pages that are latched. # CacheMinimum includes pages that are used for memory. # CacheMinimum includes pages that are flagged with errors. CacheMinimum = 0x4 # Cache maximum includes cache minimum. # Cache maximum includes the entire cache image. CacheMaximum = 0x8 # Dump includes pages that are modified. CacheIncludeDirtyPages = 0x10 # Dump includes pages that contain valid data. CacheIncludeCachedPages = 0x20 # Dump includes pages that are corrupted (expensive to compute). CacheIncludeCorruptedPages = 0x40 class PrereadKeysGrbit(Enum): """ PrereadKeysGrbit Options for . """ # Preread forward. Forward = 0x1 # Preread backwards. Backwards = 0x2 class Windows7Grbits(object): """ Windows7Grbits Grbits that have been added to the Windows 7 version of ESENT. """ # Compress data in the column, if possible. ColumnCompressed = ColumndefGrbit(0x80000) # Try to compress the data when storing it. Compressed = SetColumnGrbit(0x20000) # Don't compress the data when storing it. Uncompressed = SetColumnGrbit(0x10000) # Recover without error even if uncommitted logs have been lost. Set # the recovery waypoint with Windows7Param.WaypointLatency to enable # this type of recovery. ReplayIgnoreLostLogs = InitGrbit(0x80) # Terminate without flushing the database cache. Dirty = TermGrbit(0x8) # Permit only intrinsic LV's (so materialisation is not required simply # because a TT has an LV column). IntrinsicLVsOnly = TempTableGrbit(0x80) # When enumerating column values only retrieve data that is present in # the record. This means that BLOB columns will not always be retrieved. EnumerateInRecordOnly = EnumerateColumnsGrbit(0x00200000) # Force a new logfile to be created. This option may be used even if # the session is not currently in a transaction. This option cannot # be used in combination with any other option. ForceNewLog = CommitTransactionGrbit(0x10) # No instances will be prepared by default. Instances must be added explicitly. ExplicitPrepare = SnapshotPrepareGrbit(0x8) # Hint that the sequential traversal will be in the forward direction. Forward = SetTableSequentialGrbit(0x1) # While running Online Defragmentation, do not perform partial merges of pages. NoPartialMerges = DefragGrbit(0x80) # Defragment a single BTree. DefragmentBTree = DefragGrbit(0x100) # Hint that the sequential traversal will be in the backward direction. Backward = SetTableSequentialGrbit(0x2) # The database engine will initiate automatic background database maintenance upon database attachment. EnableAttachDbBackgroundMaintenance = AttachDatabaseGrbit(0x800) # The database engine will initiate automatic background database maintenance upon database creation. EnableCreateDbBackgroundMaintenance = CreateDatabaseGrbit(0x800) pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/Windows81Grbits.py000077500000000000000000000034761513773544400300620ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : Windows81Grbits.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum from dsinternals.microsoft.isam.esent.interop.grbits import * class ShrinkDatabaseGrbit(Enum): """ ShrinkDatabaseGrbit Options for . """ # Does not reduce the size of the database during normal operations. Off = 0x0 # Turns on the database shrinking functionality. If this parameter is not # set, then will be unable to reclaim # space to the file system. # Uses the file system's Sparse Files feature to release space # in the middle of a file. When enough rows or tables get free up by # the Version Store Cleanup task, and space is reclaimed, the database # engine will attempt to return it to the file system, via sparse files. # Sparse files are currently only available on NTFS and ReFS file systems. On = 0x1 # After space is release from a table to a the root Available Extent, the database # engine will attempt to release the space back to the file system. This parameter # requires that is also specified. Realtime = 0x2 class Windows81Grbits(object): """ Windows81Grbits Options that have been introduced in Windows 8.1. """ # Only shrink the database to the desired size, but keeping an # empty extent at the end. If the resize call would grow the database, do nothing. # In order to use this functionality, # must be set to . Otherwise, an exception may # be thrown. OnlyShrink = ResizeDatabaseGrbit(0x2) pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/Windows8Grbits.py000077500000000000000000000066661513773544400300050ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : Windows8Grbits.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum from dsinternals.microsoft.isam.esent.interop.grbits import * class ErrorInfoGrbit(Enum): """ ErrorInfoGrbit Options for . """ # No option. NONE = 0 class ResizeDatabaseGrbit(Enum): """ ResizeDatabaseGrbit Options for . """ # No option. NONE = 0 # Only grow the database. If the resize call would shrink the database, do nothing. OnlyGrow = 0x1 class DurableCommitCallbackGrbit(Enum): """ DurableCommitCallbackGrbit Options passed to log flush callback. """ # Default options. NONE = 0 class PrereadIndexRangesGrbit(Enum): """ PrereadIndexRangesGrbit Options for . """ # Preread forward. Forward = 0x1 # Preread backwards. Backwards = 0x2 # Preread only first page of any long column. FirstPageOnly = 0x4 # Normalized key/bookmark provided instead of column value. NormalizedKey = 0x8 # Options for . class StopServiceGrbit(Enum): """ StopServiceGrbit """ # Stops all ESE services for the specified instance. All = 0x00000000 # Stops restartable client specificed background maintenance tasks (B+ Tree Defrag). BackgroundUserTasks = 0x00000002 # Quiesces all dirty caches to disk. Asynchronous. Quiescing is cancelled if the # bit is called subsequently. QuiesceCaches = 0x00000004 # Resumes previously issued StopService operations, i.e. "restarts service". Can be combined # with above grbits to Resume specific services, or with 0x0 Resumes all previous stopped services. # Warning: This bit can only be used to resume JET_bitStopServiceBackground and JET_bitStopServiceQuiesceCaches, if you # did a JET_bitStopServiceAll or JET_bitStopServiceAPI, attempting to use JET_bitStopServiceResume will fail. Resume = 0x80000000 class CursorFilterGrbit(Enum): """ CursorFilterGrbit Options passed while setting cursor filters. """ # Default options. NONE = 0 class JetIndexColumnGrbit(Enum): """ JetIndexColumnGrbit Options for . """ # Default options. NONE = 0 # Zero-length value (non-null). ZeroLength = 0x1 class Windows8Grbits(object): """ Windows8Grbits System parameters that have been introduced in Windows 8. """ # Allows db to remain attached at the end of recovery (for faster # transition to running state). KeepDbAttachedAtEndOfRecovery = InitGrbit(0x1000) # Purge database pages on attach. PurgeCacheOnAttach = AttachDatabaseGrbit(0x1000) # Specifying this flag will change GUID sort order to .Net standard. IndexDotNetGuid = CreateIndexGrbit(0x00040000) # This option requests that the temporary table sort columns of type # JET_coltypGUID according to .Net Guid sort order. TTDotNetGuid = TempTableGrbit(0x100) pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/__init__.py000077500000000000000000000002501513773544400266260ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/esent/000077500000000000000000000000001513773544400256335ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/esent/__init__.py000077500000000000000000000002501513773544400277440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/esent/esentstubattributes.py000077500000000000000000000106361513773544400323410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : esentstubattributes.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SecurityAction(Enum): """ SecurityAction A fake enumeration to allow compilation on platforms that lack this enumeration. """ LinkDemand = 0 class Attribute(object): pass class SecurityPermissionAttribute(Attribute): """ SecurityPermissionAttribute A fake attribute to allow compilation on platforms that lack this attribute. """ def __init__(self, action: SecurityAction): """ Initializes a new instance of the class. """ pass def toString(self): """ Prints out the object's contents. A string representation or the object. """ return self.ToString() class BestFitMappingAttribute(Attribute): """ BestFitMappingAttribute A fake attribute to allow compilation on platforms that lack this attribute. """ ThrowOnUnmappableChar = None def __init__(self, bestFitMapping: bool): """ The best fit mapping. """ pass def toString(self): """ Prints out the object's contents. A string representation or the object. """ return self.ToString() class SuppressUnmanagedCodeSecurityAttribute(Attribute): """ SuppressUnmanagedCodeSecurityAttribute A fake attribute to allow compilation on platforms that lack this attribute. """ def toString(self): """ Prints out the object's contents. A string representation or the object. """ return self.ToString() class ComVisibleAttribute(Attribute): """ SuppressUnmanagedCodeSecurityAttribute A fake attribute to allow compilation on platforms that lack this attribute. """ def __init__(self, comVisible: bool): pass def toString(self): """ Prints out the object's contents. A string representation or the object. """ return self.ToString() class SerializableAttribute(Attribute): """ SuppressUnmanagedCodeSecurityAttribute Indicates that a class can be serialized. This class cannot be inherited. """ def toString(self): """ Prints out the object's contents. A string representation or the object. """ return self.ToString() class NonSerializedAttribute(Attribute): """ Indicates that a field of a serializable class should not be serialized. This class cannot be inherited. Prints out the object's contents. A string representation or the object. """ def toString(self): return "" class Consistency(Enum): """ Consistency The consistency model. A stub. """ # Might corrupt the process. MayCorruptProcess = 0 # Might corrupt the application domain. MayCorruptAppDomain = 1 # Might corrupt the instance. MayCorruptInstance = 2 # Will not corrupt the state. WillNotCorruptState = 3 class Cer(Enum): """ Cer The Crticial Execution Region description. A stub. """ # No options. NONE = 0 # This might fail. MayFail = 1 # A successful CER. Success = 2 class ReliabilityContractAttribute(Attribute): """ ReliabilityContractAttribute The description of the reliability contract. A stub. """ # The consistency guarantee. A stub. consistency: Consistency = None # The critical execution region. A stub. cer: Cer = Cer.NONE def __init__(self, consistencyGuarantee: Consistency, cer: Cer): """ Initializes a new instance of the ReliabilityContractAttribute class. A stub. The guarantee of the consistency. The critical execution region description. """ self.consistency = consistencyGuarantee self.cer = cer def getConsistency(self): """ Gets the consistency guarantee. A stub. """ return self.consistency def getCer(self): """ Gets the critical execution region. A stub. """ return self.cer pydsinternals-1.2.5/dsinternals/microsoft/isam/esent/interop/grbits.py000077500000000000000000001356321513773544400263760ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : grbits.py # Author : Podalirius (@podalirius_) # Date created : 1 Aug 2021 from enum import Enum class CreateInstanceGrbit(Enum): """ CreateInstanceGrbit Options for . """ # Default options. NONE = 0 class InitGrbit(Enum): """ InitGrbit # Options for . # # # # # # """ # Default options. NONE = 0 class TermGrbit(Enum): """ TermGrbit Options for . """ # Default options. NONE = 0 # Requests that the instance be shut down cleanly. Any optional # cleanup work that would ordinarily be done in the background at # run time is completed immediately. Complete = 1 # Requests that the instance be shut down as quickly as possible. # Any optional work that would ordinarily be done in the # background at run time is abandoned. Abrupt = 2 class CreateDatabaseGrbit(Enum): """ CreateDatabaseGrbit Options for . """ # Default options. NONE = 0 # By default, if JetCreateDatabase is called and the database already exists # the Api call will fail and the original database will not be overwritten. # OverwriteExisting changes this behavior, and the old database # will be overwritten with a new one. OverwriteExisting = 0x200 # Turns off logging. Setting this bit loses the ability to replay log files # and recover the database to a consistent usable state after a crash. RecoveryOff = 0x8 class DetachDatabaseGrbit(Enum): """ DetachDatabaseGrbit Options for . """ # Default options. NONE = 0 # If is used, will be returned. # [Obsolete("ForceDetach is no longer used.")] ForceDetach = 1 # is no longer used. # [Obsolete("ForceClose is no longer used.")] ForceClose = 0x2 # If is used, will be returned. # [Obsolete("ForceCloseAndDetach is no longer used.")] ForceCloseAndDetach = (0x2 | 0x1) class AttachDatabaseGrbit(Enum): """ AttachDatabaseGrbit Options for . """ # Default options. NONE = 0 # Prevents modifications to the database. ReadOnly = 0x1 # If JET_paramEnableIndexChecking has been set, all indexes over Unicode # data will be deleted. DeleteCorruptIndexes = 0x10 class OpenDatabaseGrbit(Enum): """ OpenDatabaseGrbit Options for . """ # Default options. NONE = 0 # Prevents modifications to the database. ReadOnly = 0x1 # Allows only a single session to attach a database. # Normally, several sessions can open a database. Exclusive = 0x2 class CloseDatabaseGrbit(Enum): """ CloseDatabaseGrbit Options for . """ # Default options. NONE = 0 class CompactGrbit(Enum): """ CompactGrbit Options for . """ # Default options. NONE = 0 # Causes JetCompact to dump statistics on the source database to a file # named DFRGINFO.TXT. Statistics include the name of each table in # source database, number of rows in each table, total size in bytes of # all rows in each table, total size in bytes of all columns of type # or # that were large enough to be stored separate from the record, number # of clustered index leaf pages, and the number of long value leaf pages. # In addition, summary statistics including the size of the source database # destination database, time required for database compaction, temporary # database space are all dumped as well. Stats = 0x20 # Used when the source database is known to be corrupt. It enables a # whole set of new behaviors intended to salvage as much data as # possible from the source database. JetCompact with this option set # may return but not copy all of the data # created in the source database. Data that was in damaged portions of # the source database will be skipped. # [Obsolete("Use esentutl repair functionality instead.")] Repair = 0x40, class SnapshotFreezeGrbit(Enum): """ SnapshotFreezeGrbit Options for . """ # Default options. NONE = 0 class SnapshotPrepareGrbit(Enum): """ SnapshotPrepareGrbit Options for . """ # Default options. NONE = 0 # Only logfiles will be taken. IncrementalSnapshot = 0x1 # A copy snapshot (normal or incremental) with no log truncation. CopySnapshot = 0x2 class SnapshotThawGrbit(Enum): """ SnapshotThawGrbit Options for . """ # Default options. NONE = 0 class BackupGrbit(Enum): """ BackupGrbit Options for . """ # Default options. NONE = 0 # Creates an incremental backup as opposed to a full backup. This # means that only the log files created since the last full or # incremental backup will be backed up. Incremental = 0x1 # Creates a full backup of the database. This allows the preservation # of an existing backup in the same directory if the new backup fails. Atomic = 0x4 class BeginExternalBackupGrbit(Enum): """ BeginExternalBackupGrbit Options for . """ # Default options. NONE = 0 # Creates an incremental backup as opposed to a full backup. This # means that only the log files since the last full or incremental # backup will be backed up. Incremental = 0x1 class EndExternalBackupGrbit(Enum): """ EndExternalBackupGrbit Options for . """ # Default options. NONE = 0 # The client application finished the backup completely, and is ending normally. Normal = 0x1 # The client application is aborting the backup. Abort = 0x2 class BeginTransactionGrbit(Enum): """ BeginTransactionGrbit Options for . """ # Default options. NONE = 0 # The transaction will not modify the database. If an update is attempted # that operation will fail with . This # option is ignored unless it is requested when the given session is not # already in a transaction. ReadOnly = 0x1 class CommitTransactionGrbit(Enum): """ CommitTransactionGrbit Options for JetCommitTransaction. """ # Default options. NONE = 0 # The transaction is committed normally but this Api does not wait for # the transaction to be flushed to the transaction log file before returning # to the caller. This drastically reduces the duration of a commit operation # at the cost of durability. Any transaction that is not flushed to the log # before a crash will be automatically aborted during crash recovery during # the next call to JetInit. If WaitLastLevel0Commit or WaitAllLevel0Commit # are specified, this option is ignored. LazyFlush = 0x1 # If the session has previously committed any transactions and they have not yet # been flushed to the transaction log file, they should be flushed immediately. # This Api will wait until the transactions have been flushed before returning # to the caller. This is useful if the application has previously committed several # transactions using JET_bitCommitLazyFlush and now wants to flush all of them to disk. # # This option may be used even if the session is not currently in a transaction. # This option cannot be used in combination with any other option. # WaitLastLevel0Commit = 0x2 class RollbackTransactionGrbit(Enum): """ RollbackTransactionGrbit Options for JetRollbackTransaction. """ # Default options. NONE = 0 # This option requests that all changes made to the state of the # database during all save points be undone. As a result, the # session will exit the transaction. RollbackAll = 0x1 class EndSessionGrbit(Enum): """ EndSessionGrbit Options for JetEndSession. """ # Default options. NONE = 0 class OpenTableGrbit(Enum): """ OpenTableGrbit Options for JetOpenTable. """ # Default options. NONE = 0 # This table cannot be opened for write access by another session. DenyWrite = 0x1 # This table cannot be opened for read access by another session. DenyRead = 0x2 # Request read-only access to the table. ReadOnly = 0x4 # Request write access to the table. Updatable = 0x8 # Allow DDL modifications to a table flagged as FixedDDL. This option # must be used with DenyRead. PermitDDL = 0x10 # Do not cache pages for this table. NoCache = 0x20 # Provides a hint that the table is probably not in the buffer cache, and # that pre-reading may be beneficial to performance. Preread = 0x40 # Assume a sequential access pattern and prefetch database pages. Sequential = 0x8000 # Table belongs to stats class 1. TableClass1 = 0x00010000 # Table belongs to stats class 2. TableClass2 = 0x00020000 # Table belongs to stats class 3. TableClass3 = 0x00030000 # Table belongs to stats class 4. TableClass4 = 0x00040000 # Table belongs to stats class 5. TableClass5 = 0x00050000 # Table belongs to stats class 6. TableClass6 = 0x00060000 # Table belongs to stats class 7. TableClass7 = 0x00070000 # Table belongs to stats class 8. TableClass8 = 0x00080000 # Table belongs to stats class 9. TableClass9 = 0x00090000 # Table belongs to stats class 10. TableClass10 = 0x000A0000 # Table belongs to stats class 11. TableClass11 = 0x000B0000 # Table belongs to stats class 12. TableClass12 = 0x000C0000 # Table belongs to stats class 13. TableClass13 = 0x000D0000 # Table belongs to stats class 14. TableClass14 = 0x000E0000 # Table belongs to stats class 15. TableClass15 = 0x000F0000 class DupCursorGrbit(Enum): """ DupCursorGrbit Options for . """ # Default options. NONE = 0 class LsGrbit(Enum): """ LsGrbit Options for and . """ # Default options. NONE = 0 # The context handle for the chosen object should be reset to JET_LSNil. Reset = 0x1 # Specifies the context handle should be associated with the given cursor. Cursor = 0x2 # Specifies that the context handle should be associated with the # table associated with the given cursor. It is illegal to use this # option with . Table = 0x4 class SetColumnGrbit(Enum): """ SetColumnGrbit Options for the and its associated overloads. """ # Default options. NONE = 0 # This option is used to append data to a column of type JET_coltypLongText # or JET_coltypLongBinary. The same behavior can be achieved by determining # the size of the existing long value and specifying ibLongValue in psetinfo. # However, its simpler to use this grbit since knowing the size of the existing # column value is not necessary. AppendLV = 0x1 # This option is used replace the existing long value with the newly provided # data. When this option is used, it is as though the existing long value has # been set to 0 (zero) length prior to setting the new data. OverwriteLV = 0x4 # This option is only applicable for tagged, sparse or multi-valued columns. # It causes the column to return the default column value on subsequent retrieve # column operations. All existing column values are removed. RevertToDefaultValue = 0x200 # This option is used to force a long value, columns of type JET_coltyp.LongText # or JET_coltyp.LongBinary, to be stored separately from the remainder of record # data. This occurs normally when the size of the long value prevents it from being # stored with remaining record data. However, this option can be used to force the # long value to be stored separately. Note that long values four bytes in size # of smaller cannot be forced to be separate. In such cases, the option is ignored. SeparateLV = 0x40 # This option is used to interpret the input buffer as a integer number of bytes # to set as the length of the long value described by the given columnid and if # provided, the sequence number in psetinfo->itagSequence. If the size given is # larger than the existing column value, the column will be extended with 0s. # If the size is smaller than the existing column value then the value will be # truncated. SizeLV = 0x8 # This option is used to enforce that all values in a multi-valued column are # distinct. This option compares the source column data, without any # transformations, to other existing column values and an error is returned # if a duplicate is found. If this option is given, then AppendLV, OverwriteLV # and SizeLV cannot also be given. UniqueMultiValues = 0x80 # This option is used to enforce that all values in a multi-valued column are # distinct. This option compares the key normalized transformation of column # data, to other similarly transformed existing column values and an error is # returned if a duplicate is found. If this option is given, then AppendLV, # OverwriteLV and SizeLV cannot also be given. UniqueNormalizedMultiValues = 0x100 # This option is used to set a value to zero length. Normally, a column value # is set to NULL by passing a cbMax of 0 (zero). However, for some types, like # JET_coltyp.Text, a column value can be 0 (zero) length instead of NULL, and # this option is used to differentiate between NULL and 0 (zero) length. ZeroLength = 0x20 # Try to store long-value columns in the record, even if they exceed the default # separation size. IntrinsicLV = 0x400 class RetrieveColumnGrbit(Enum): """ RetrieveColumnGrbit Options for JetRetrieveColumn. """ # Default options. NONE = 0 # This flag causes retrieve column to retrieve the modified value instead of # the original value. If the value has not been modified, then the original # value is retrieved. In this way, a value that has not yet been inserted or # updated may be retrieved during the operation of inserting or updating a record. RetrieveCopy = 0x1 # This option is used to retrieve column values from the index, if possible # without accessing the record. In this way, unnecessary loading of records # can be avoided when needed data is available from index entries themselves. RetrieveFromIndex = 0x2 # This option is used to retrieve column values from the index bookmark # and may differ from the index value when a column appears both in the # primary index and the current index. This option should not be specified # if the current index is the clustered, or primary, index. This bit cannot # be set if RetrieveFromIndex is also set. RetrieveFromPrimaryBookmark = 0x4 # This option is used to retrieve the sequence number of a multi-valued # column value in JET_RETINFO.itagSequence. Retrieving the sequence number # can be a costly operation and should only be done if necessary. RetrieveTag = 0x8 # This option is used to retrieve multi-valued column NULL values. If # this option is not specified, multi-valued column NULL values will # automatically be skipped. RetrieveNull = 0x10 # This option affects only multi-valued columns and causes a NULL # value to be returned when the requested sequence number is 1 and # there are no set values for the column in the record. RetrieveIgnoreDefault = 0x20 class EnumerateColumnsGrbit(Enum): """ EnumerateColumnsGrbit Options for and its associated overloads. """ # Default options. NONE = 0 # When enumerating column values, all columns for which we are retrieving # all values and that have only one non-NULL column value may be returned # in a compressed format. The status for such columns will be set to # and the size of the column value # and the memory containing the column value will be returned directly in # the structure. It is not guaranteed that # all eligible columns are compressed in this manner. See # for more information. EnumerateCompressOutput = 0x00080000 # This option indicates that the modified column values of the record # should be enumerated rather than the original column values. If a # column value has not been modified, the original column value is # enumerated. In this way, a column value that has not yet been inserted # or updated may be enumerated when inserting or updating a record. # # This option is identical to . # EnumerateCopy = 0x1 # If a given column is not present in the record then no column value # will be returned. Ordinarily, the default value for the column # if any, would be returned in this case. It is guaranteed that if the # column is set to a value different than the default value then that # different value will be returned (that is, if a column with a # default value is explicitly set to NULL then a NULL will be returned # as the value for that column). Even if this option is requested, it # is still possible to see a column value that happens to be equal to # the default value. No effort is made to remove column values that # match their default values. # It is important to remember that this option affects the output of # # and its associated overloads when used with # or # . EnumerateIgnoreDefault = 0x20 # If a non-NULL value exists for the requested column or column value # then the associated data is not returned. Instead, the associated # status for that column or column value will be set to # . If the column or column value # is NULL then will be returned as usual. EnumeratePresenceOnly = 0x00020000 # When enumerating all column values in the record (for example,that is # when numColumnids is zero), only tagged column values will be returned. # This option is not allowed when enumerating a specific array of column IDs. EnumerateTaggedOnly = 0x00040000, class GetRecordSizeGrbit(Enum): """ GetRecordSizeGrbit Options for . """ # Default options. NONE = 0 # Retrieve the size of the record that is in the copy buffer prepared # or update. Otherwise, the tableid must be positioned on a record # and that record will be used. InCopyBuffer = 0x1 # The JET_RECSIZE is not zeroed before filling the contents, effectively # acting as an accumulation of the statistics for multiple records visited # or updated. RunningTotal = 0x2 # Ignore non-intrinsic Long Values. Only the local record on the page # will be used. Local = 0x4 class GetSecondaryIndexBookmarkGrbit(Enum): """ GetSecondaryIndexBookmarkGrbit Options for . """ # Default options. NONE = 0 class GotoSecondaryIndexBookmarkGrbit(Enum): """ GotoSecondaryIndexBookmarkGrbit Options for . """ # Default options. NONE = 0 # In the event that the index entry can no longer be found, the cursor # will be left positioned where that index entry was previously found. # The operation will still fail with JET_errRecordDeleted; however # it will be possible to move to the next or previous index entry # relative to the index entry that is now missing. BookmarkPermitVirtualCurrency = 0x1 class MoveGrbit(Enum): """ MoveGrbit Options for JetMove. """ # Default options. NONE = 0 # Moves the cursor forward or backward by the number of index entries # required to skip the requested number of index key values encountered # in the index. This has the effect of collapsing index entries with # duplicate key values into a single index entry. MoveKeyNE = 0x1 class MakeKeyGrbit(Enum): """ MakeKeyGrbit Options for JetMakeKey. """ # Default options. NONE = 0 # A new search key should be constructed. Any previously existing search # key is discarded. NewKey = 0x1 # When this option is specified, all other options are ignored, any # previously existing search key is discarded, and the contents of the # input buffer are loaded as the new search key. NormalizedKey = 0x8 # If the size of the input buffer is zero and the current key column # is a variable length column, this option indicates that the input # buffer contains a zero length value. Otherwise, an input buffer size # of zero would indicate a NULL value. KeyDataZeroLength = 0x10 # This option indicates that the search key should be constructed # such that any key columns that come after the current key column # should be considered to be wildcards. StrLimit = 0x2 # This option indicates that the search key should be constructed # such that the current key column is considered to be a prefix # wildcard and that any key columns that come after the current # key column should be considered to be wildcards. SubStrLimit = 0x4 # The search key should be constructed such that any key columns # that come after the current key column should be considered to # be wildcards. FullColumnStartLimit = 0x100 # The search key should be constructed in such a way that any key # columns that come after the current key column are considered to # be wildcards. FullColumnEndLimit = 0x200 # The search key should be constructed such that the current key # column is considered to be a prefix wildcard and that any key # columns that come after the current key column should be considered # to be wildcards. PartialColumnStartLimit = 0x400 # The search key should be constructed such that the current key # column is considered to be a prefix wildcard and that any key # columns that come after the current key column should be considered # to be wildcards. PartialColumnEndLimit = 0x800 class RetrieveKeyGrbit(Enum): """ RetrieveKeyGrbit Options for JetRetrieveKey. """ # Default options. NONE = 0 # Retrieve the currently constructed key. RetrieveCopy = 0x1 class SeekGrbit(Enum): """ SeekGrbit Options for . """ # The cursor will be positioned at the index entry closest to the # start of the index that exactly matches the search key. SeekEQ = 0x1 # The cursor will be positioned at the index entry closest to the # end of the index that is less than an index entry that would # exactly match the search criteria. SeekLT = 0x2 # The cursor will be positioned at the index entry closest to the # end of the index that is less than or equal to an index entry # that would exactly match the search criteria. SeekLE = 0x4 # The cursor will be positioned at the index entry closest to the # start of the index that is greater than or equal to an index # entry that would exactly match the search criteria. SeekGE = 0x8 # The cursor will be positioned at the index entry closest to the # start of the index that is greater than an index entry that # would exactly match the search criteria. SeekGT = 0x10 # An index range will automatically be setup for all keys that # exactly match the search key. SetIndexRange = 0x20 class SetIndexRangeGrbit(Enum): """ SetIndexRangeGrbit Options for . """ # Default options. NONE = 0x0 # This option indicates that the limit of the index range is inclusive. RangeInclusive = 0x1 # The search key in the cursor represents the search criteria for the # index entry closest to the end of the index that will match the index # range. RangeUpperLimit = 0x2 # The index range should be removed as soon as it has been established. # This is useful for testing for the existence of index entries that # match the search criteria. RangeInstantDuration = 0x4 # Cancel and existing index range. RangeRemove = 0x8 class IndexRangeGrbit(Enum): """ IndexRangeGrbit Options for the object. """ # Records in the cursors indexrange should be included in the output. RecordInIndex = 0x1 class IntersectIndexesGrbit(Enum): """ IntersectIndexesGrbit Options for . """ # Default options. NONE = 0 class SetCurrentIndexGrbit(Enum): """ SetCurrentIndexGrbit Options for and . """ # Default options. This is the same as . NONE = 0 # Indicates that the cursor should be positioned on the first entry of # the specified index. If the current index is being selected then this # option is ignored. MoveFirst = 0 # Indicates that the cursor should be positioned on the index entry # of the new index that corresponds to the record associated with the # index entry at the current position of the cursor on the old index. NoMove = 0x2 class SetTableSequentialGrbit(Enum): """ SetTableSequentialGrbit Options for . """ # Default options. NONE = 0 class ResetTableSequentialGrbit(Enum): """ ResetTableSequentialGrbit Options for . """ # Default options. NONE = 0 class GetLockGrbit(Enum): """ GetLockGrbit Options for JetGetLock. """ # Acquire a read lock on the current record. Read locks are incompatible with # write locks already held by other sessions but are compatible with read locks # held by other sessions. Read = 0x1 # Acquire a write lock on the current record. Write locks are not compatible # with write or read locks held by other sessions but are compatible with # read locks held by the same session. Write = 0x2 class EscrowUpdateGrbit(Enum): """ EscrowUpdateGrbit Options for . """ # Default options. NONE = 0 # Even if the session performing the escrow update has its transaction rollback # this update will not be undone. As the log records may not be flushed to disk # recent escrow updates done with this flag may be lost if there is a crash. NoRollback = 0x1 class ColumndefGrbit(Enum): """ ColumndefGrbit Options for the structure. """ # Default options. NONE = 0x0 # The column will be fixed. It will always use the same amount of space in a row # regardless of how much data is being stored in the column. ColumnFixed # cannot be used with ColumnTagged. This bit cannot be used with long values # (that is JET_coltyp.LongText and JET_coltyp.LongBinary). ColumnFixed = 0x1 # The column will be tagged. Tagged columns do not take up any space in the database # if they do not contain data. This bit cannot be used with ColumnFixed. ColumnTagged = 0x2 # The column must never be set to a NULL value. On Windows XP this can only be applied to # fixed columns (bit, byte, integer, etc). ColumnNotNULL = 0x4 # The column is a version column that specifies the version of the row. The value of # this column starts at zero and will be automatically incremented for each update on # the row. This option can only be applied to columns. This option cannot # be used with , , or . ColumnVersion = 0x8 # The column will automatically be incremented. The number is an increasing number, and # is guaranteed to be unique within a table. The numbers, however, might not be continuous. # For example, if five rows are inserted into a table, the "autoincrement" column could # contain the values { 1, 2, 6, 7, 8 }. This bit can only be used on columns of type # or . ColumnAutoincrement = 0x10 # The column can be updated. This is NOT a valid grbit to set on input to any API. It is # returned as part of the structure's grbit member, as an # output from Api.JetGetColumnInfo. ColumnUpdatable = 0x20 # The column can be multi-valued. # A multi-valued column can have zero, one, or more values # associated with it. The various values in a multi-valued column are identified by a number # called the itagSequence member, which belongs to various structures, including: # , , , , and . # Multi-valued columns must be tagged columns; that is, they cannot be fixed-length or # variable-length columns. ColumnMultiValued = 0x400 # Specifies that a column is an escrow update column. An escrow update column can be # updated concurrently by different sessions with JetEscrowUpdate and will maintain # transactional consistency. An escrow update column must also meet the following conditions: # An escrow update column can be created only when the table is empty. # An escrow update column must be of type JET_coltypLong. # An escrow update column must have a default value. # ColumnEscrowUpdate cannot be used in conjunction with # , or . ColumnEscrowUpdate = 0x800 # The column will be created in an without version information. This means that other # transactions that attempt to add a column with the same name will fail. This bit # is only useful with JetAddColumn. It cannot be used within a transaction. ColumnUnversioned = 0x1000 # In doing an outer join, the retrieve column operation might not have a match # from the inner table. ColumnMaybeNull = 0x2000 # When the escrow-update column reaches a value of zero, the callback function will be invoked. ColumnFinalize = 0x4000 # The default value for a column will be provided by a callback function. A column that # has a user-defined default must be a tagged column. Specifying # means that pvDefault must point to a JET_USERDEFINEDDEFAULT structure, and cbDefault must be # set to sizeof( JET_USERDEFINEDDEFAULT ). ColumnUserDefinedDefault = 0x8000 # The column will be a key column for the temporary table. The order # of the column definitions with this option specified in the input # array will determine the precedence of each key column for the # temporary table. The first column definition in the array that # has this option set will be the most significant key column and # so on. If more key columns are requested than can be supported # by the database engine then this option is ignored for the # unsupportable key columns. TTKey = 0x40 # The sort order of the key column for the temporary table should # be descending rather than ascending. If this option is specified # without then this option is ignored. TTDescending = 0x80 class CreateTableColumnIndexGrbit(Enum): """ CreateTableColumnIndexGrbit Options for the parameter used by . """ # Default options. NONE = 0x0 # The DDL is fixed. FixedDDL = 0x1 # The DDL is inheritable. Implies FixedDDL. TemplateTable = 0x2 # Used in conjunction with TemplateTable. NoFixedVarColumnsInDerivedTables = 0x4 class CreateIndexGrbit(Enum): """ CreateIndexGrbit Options for and . """ # Default options. NONE = 0x0 # Duplicate index entries (keys) are disallowed. This is enforced when JetUpdate is called # not when JetSetColumn is called. IndexUnique = 0x1 # The index is a primary (clustered) index. Every table must have exactly one primary index. # If no primary index is explicitly defined over a table, then the database engine will # create its own primary index. IndexPrimary = 0x2 # None of the columns over which the index is created may contain a NULL value. IndexDisallowNull = 0x4 # Do not add an index entry for a row if all of the columns being indexed are NULL. IndexIgnoreNull = 0x8 # Do not add an index entry for a row if any of the columns being indexed are NULL. IndexIgnoreAnyNull = 0x20 # Do not add an index entry for a row if the first column being indexed is NULL. IndexIgnoreFirstNull = 0x40 # Specifies that the index operations will be logged lazily. JET_bitIndexLazyFlush does not # affect the laziness of data updates. If the indexing operations is interrupted by process # termination, Soft Recovery will still be able to able to get the database to a consistent # state, but the index may not be present. IndexLazyFlush = 0x80 # Do not attempt to build the index, because all entries would evaluate to NULL. grbit MUST # also specify JET_bitIgnoreAnyNull when JET_bitIndexEmpty is passed. This is a performance # enhancement. For example if a new column is added to a table, then an index is created over # this newly added column, all of the records in the table would be scanned even though they # would never get added to the index anyway. Specifying JET_bitIndexEmpty skips the scanning # of the table, which could potentially take a long time. IndexEmpty = 0x100 # Causes index creation to be visible to other transactions. Normally a session in a # transaction will not be able to see an index creation operation in another session. This # flag can be useful if another transaction is likely to create the same index, so that the # second index-create will simply fail instead of potentially causing many unnecessary database # operations. The second transaction may not be able to use the index immediately. The index # creation operation needs to complete before it is usable. The session must not currently be in # a transaction to create an index without version information. IndexUnversioned = 0x200 # Specifying this flag causes NULL values to be sorted after data for all columns in the index. IndexSortNullsHigh = 0x400 class IndexKeyGrbit(Enum): """ IndexKeyGrbit Key definition grbits. Used when retrieving information about an index, contained in the column specified in . """ # Key segment is ascending. Ascending = 0x0 # Key segment is descending. Descending = 0x1 class ConditionalColumnGrbit(Enum): """ ConditionalColumnGrbit Options for the structure. """ # The column must be null for an index entry to appear in the index. ColumnMustBeNull = 0x1 # The column must be non-null for an index entry to appear in the index. ColumnMustBeNonNull = 0x2 class TempTableGrbit(Enum): """ TempTableGrbit Options for temporary table creation, with Api.JetOpenTempTable2, and . """ # Default options. NONE = 0 # This option requests that the temporary table be flexible enough to # permit the use of JetSeek to lookup records by index key. If this # functionality it not required then it is best to not request it. If this # functionality is not requested then the temporary table manager may be # able to choose a strategy for managing the temporary table that will # result in improved performance. Indexed = 0x1 # This option requests that records with duplicate index keys be removed # from the final set of records in the temporary table. # Prior to Windows Server 2003, the database engine always assumed this # option to be in effect due to the fact that all clustered indexes must # also be a primary key and thus must be unique. As of Windows Server # 2003, it is now possible to create a temporary table that does NOT # remove duplicates when the # option is also specified. # It is not possible to know which duplicate will win and which duplicates # will be discarded in general. However, when the # option is requested then the first # record with a given index key to be inserted into the temporary table # will always win. Unique = 0x2 # This option requests that the temporary table be flexible enough to # allow records that have previously been inserted to be subsequently # changed. If this functionality it not required then it is best to not # request it. If this functionality is not requested then the temporary # table manager may be able to choose a strategy for managing the # temporary table that will result in improved performance. Updatable = 0x4 # This option requests that the temporary table be flexible enough to # allow records to be scanned in arbitrary order and direction using # . # If this functionality it not required then it is best to not # request it. If this functionality is not requested then the temporary # table manager may be able to choose a strategy for managing the # temporary table that will result in improved performance. # Scrollable = 0x8 # This option requests that NULL key column values sort closer # to the end of the index than non-NULL key column values. SortNullsHigh = 0x10 # This option forces the temporary table manager to abandon # any attempt to choose a clever strategy for managing the # temporary table that will result in enhanced performance. ForceMaterialization = 0x20 # This option requests that any attempt to insert a record with the same # index key as a previously inserted record will immediately fail with # . If this option is not requested then a duplicate # may be detected immediately and fail or may be silently removed later # depending on the strategy chosen by the database engine to implement the # temporary table based on the requested functionality. If this # functionality it not required then it is best to not request it. If this # functionality is not requested then the temporary table manager may be # able to choose a strategy for managing the temporary table that will # result in improved performance. ErrorOnDuplicateInsertion = 0x20 class DeleteColumnGrbit(Enum): """ DeleteColumnGrbit Options for . """ # Default options. NONE = 0 # The API should only attempt to delete columns in the derived table. # If a column of that name exists in the base table it will be ignored. IgnoreTemplateColumns = 0x1 class RenameColumnGrbit(Enum): """ RenameColumnGrbit Options for . """ # Default options. NONE = 0 class SetColumnDefaultValueGrbit(Enum): """ SetColumnDefaultValueGrbit Options for . """ # Default options. NONE = 0 class IdleGrbit(Enum): """ IdleGrbit Options for . """ # Default options. NONE = 0x0 # Reserved for future use. If this flag is specified, the API will return . FlushBuffers = 0x01 # Triggers cleanup of the version store. Compact = 0x02 # Returns if version store is more than half full. GetStatus = 0x04 class DefragGrbit(Enum): """ DefragGrbit Options for . """ # Defragments the available space portion of ESE database space # allocation. Database space is divided into two types, owned # space and available space. Owned space is allocated to a table # or index while available space is ready for use within the table # or index, respectively. Available space is much more dynamic in # behavior and requires on-line defragmentation more so than owned # space or table or index data. AvailSpaceTreesOnly = 0x40 # Starts a new defragmentation task. BatchStart = 0x1 # Stops a defragmentation task. BatchStop = 0x2, class ColInfoGrbit(Enum): """ ColInfoGrbit Grbits for the various Api.JetGetColumnInfo and Api.JetGetTableColumnInfo overloads. Internally this value is OR'ed together with the info level. The info level is not publically exposed in this CLR code because it's only used to differentiate the type of the output parameter, which is covered by having explicit function overloads with different signatures. There is no need to expose JET_ColInfo to CLR. """ # Default options. NONE = 0x0 # For lists (example: ), only return # non-derived columns (if the table is derived from a template). # This value is 0x80000000. NonDerivedColumnsOnly = int.MinValue # For lists (example: ), only return # the column name and columnid of each column. MinimalInfo = 0x40000000 # For lists (example: ), sort # returned column list by columnid (the default is to sort list by column name). SortByColumnid = 0x20000000 class SpaceHintsGrbit(Enum): """ SpaceHintsGrbit Options for . """ # Default options. NONE = 0x0 # Generic bits. # This changes the internal allocation policy to get space hierarchically # from a B-Tree's immediate parent. SpaceHintUtilizeParentSpace = 0x00000001 # Create bits. # This bit will enable Append split behavior to grow according to the # growth dynamics of the table (set by cbMinExtent, ulGrowth, cbMaxExtent). CreateHintAppendSequential = 0x00000002 # This bit will enable Hotpoint split behavior to grow according to the # growth dynamics of the table (set by cbMinExtent, ulGrowth, cbMaxExtent). CreateHintHotpointSequential = 0x00000004 # Retrieve bits. # Reserved and ignored. RetrieveHintReserve1 = 0x00000008 # By setting this the client indicates that forward sequential scan is # the predominant usage pattern of this table (causing B+ Tree defrag to # be auto-triggered to clean it up if fragmented). RetrieveHintTableScanForward = 0x00000010 # By setting this the client indicates that backwards sequential scan # is the predominant usage pattern of this table(causing B+ Tree defrag to # be auto-triggered to clean it up if fragmented). RetrieveHintTableScanBackward = 0x00000020 # Reserved and ignored. RetrieveHintReserve2 = 0x00000040 # Reserved and ignored. RetrieveHintReserve3 = 0x00000080 # Delete bits. # The application expects this table to be cleaned up in-order # sequentially (from lowest key to highest key). DeleteHintTableSequential = 0x00000100 pydsinternals-1.2.5/dsinternals/powershell/000077500000000000000000000000001513773544400211455ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/__init__.py000077500000000000000000000002501513773544400232560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/000077500000000000000000000000001513773544400227465ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/__init__.py000077500000000000000000000002501513773544400250570ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/adsi/000077500000000000000000000000001513773544400236665ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/adsi/__init__.py000077500000000000000000000002501513773544400257770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/azuread/000077500000000000000000000000001513773544400244015ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/azuread/__init__.py000077500000000000000000000002501513773544400265120ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/base/000077500000000000000000000000001513773544400236605ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/base/__init__.py000077500000000000000000000002501513773544400257710ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/datastore/000077500000000000000000000000001513773544400247345ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/datastore/__init__.py000077500000000000000000000002501513773544400270450ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/encryption/000077500000000000000000000000001513773544400251405ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/encryption/__init__.py000077500000000000000000000002501513773544400272510ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/hash/000077500000000000000000000000001513773544400236715ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/hash/__init__.py000077500000000000000000000002501513773544400260020ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/lsa/000077500000000000000000000000001513773544400235255ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/lsa/__init__.py000077500000000000000000000002501513773544400256360ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/misc/000077500000000000000000000000001513773544400237015ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/misc/__init__.py000077500000000000000000000002501513773544400260120ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/commands/replication/000077500000000000000000000000001513773544400252575ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/commands/replication/__init__.py000077500000000000000000000002501513773544400273700ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/properties/000077500000000000000000000000001513773544400233415ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/properties/__init__.py000077500000000000000000000002501513773544400254520ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/properties/resources/000077500000000000000000000000001513773544400253535ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/properties/resources/__init__.py000077500000000000000000000002501513773544400274640ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/types/000077500000000000000000000000001513773544400223115ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/types/__init__.py000077500000000000000000000002501513773544400244220ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/powershell/utils/000077500000000000000000000000001513773544400223055ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/powershell/utils/__init__.py000077500000000000000000000002501513773544400244160ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/replication/000077500000000000000000000000001513773544400212725ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/replication/__init__.py000077500000000000000000000002501513773544400234030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/replication/model/000077500000000000000000000000001513773544400223725ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/replication/model/__init__.py000077500000000000000000000002501513773544400245030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/replication/model/properties/000077500000000000000000000000001513773544400245665ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/replication/model/properties/__init__.py000077500000000000000000000002501513773544400266770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/replication/model/test/000077500000000000000000000000001513773544400233515ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/replication/model/test/__init__.py000077500000000000000000000002501513773544400254620ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/replication/model/test/properties/000077500000000000000000000000001513773544400255455ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/replication/model/test/properties/__init__.py000077500000000000000000000002501513773544400276560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/replication/properties/000077500000000000000000000000001513773544400234665ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/replication/properties/__init__.py000077500000000000000000000002501513773544400255770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/replication/rpcprotocol.py000077500000000000000000000004441513773544400242170ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : rpcprotocol.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class RpcProtocol(Enum): """ RpcProtocol """ TCP = 0 SMB = 1 HTTP = 2 pydsinternals-1.2.5/dsinternals/replication/test/000077500000000000000000000000001513773544400222515ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/replication/test/__init__.py000077500000000000000000000002501513773544400243620ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/replication/test/properties/000077500000000000000000000000001513773544400244455ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/replication/test/properties/__init__.py000077500000000000000000000002501513773544400265560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/000077500000000000000000000000001513773544400175415ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/__init__.py000077500000000000000000000002501513773544400216520ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/interop/000077500000000000000000000000001513773544400212215ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/interop/__init__.py000077500000000000000000000002501513773544400233320ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/interop/enums/000077500000000000000000000000001513773544400223505ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/interop/enums/LsaPolicyAccessMask.py000077500000000000000000000040631513773544400265650ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : LsaPolicyAccessMask.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class LsaPolicyAccessMask(Enum): """ LsaPolicyAccessMask """ # This access type is needed to read the target system's miscellaneous security policy information. # This includes the default quota, auditing, server state and role information, and trust information. # This access type is also needed to enumerate trusted domains, accounts, and privileges. ViewLocalInformation = 0x00000001 # This access type is needed to view audit trail or audit requirements information. ViewAuditInformation = 0x00000002 # This access type is needed to view sensitive information, such as the names of accounts established # for trusted domain relationships. GetPrivateInformation = 0x00000004 # This access type is needed to change the account domain or primary domain information. TrustAdmin = 0x00000008 # This access type is needed to create a new Account object. CreateAccount = 0x00000010 # This access type is needed to create a new Private Data object. CreateSecret = 0x00000020 # Not yet supported. CreatePrivilege = 0x00000040 # Set the default system quotas that are applied to user accounts. SetDefaultQuotaLimits = 0x00000080 # This access type is needed to update the auditing requirements of the system. SetAuditRequirements = 0x00000100 # This access type is needed to change the characteristics of the audit trail such as its maximum size # or the retention period for audit records, or to clear the log. AuditLogAdmin = 0x00000200 # This access type is needed to modify the server state or role (master/replica) information.It is also # needed to change the replica source and account name information. ServerAdmin = 0x00000400 # This access type is needed to translate between names and SIDs. LookupNames = 0x00000800 Notification = 0x00001000 pydsinternals-1.2.5/dsinternals/sam/interop/enums/LsaPolicyInformationClass.py000077500000000000000000000030631513773544400300220ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : LsaPolicyInformationClass.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class LsaPolicyInformationClass(Enum): """ LsaPolicyInformationClass Defines values that indicate the type of information to set or query in a Policy object. See : https://docs.microsoft.com/en-us/windows/desktop/api/ntsecapi/ne-ntsecapi-_policy_information_class """ # Information about audit log. AuditLogInformation = 1 # Query or set the auditing rules of the system. AuditEventsInformation = 2 # Primary domain information. PrimaryDomainInformation = 3 PdAccountInformation = 4 # Query or set the name and SID of the account domain of the system. AccountDomainInformation = 5 # Query or set the role of an LSA server. LsaServerRoleInformation = 6 ReplicaSourceInformation = 7 DefaultQuotaInformation = 8 # Query or set information about the creation time and last modification of the LSA database. ModificationInformation = 9 AuditFullSetInformation = 10 # Audit log state. AuditFullQueryInformation = 11 # Query or set Domain Name System (DNS) information about the account domain associated with a Policy object. DnsDomainInformation = 12 # DNS domain information. DnsDomainInformationInt = 13 # Local account domain information. LocalAccountDomainInformation = 14 # Machine account information. MachineAccountInformation = 15 pydsinternals-1.2.5/dsinternals/sam/interop/enums/SamCommonAccessMask.py000077500000000000000000000021271513773544400265560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : samcommonaccessmask.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamCommonAccessMask(Enum): """ SamCommonAccessMask These values specify an access control that is applicable to all object types exposed by this protocol. See: https://msdn.microsoft.com/en-us/library/cc245511.aspx """ # Indicates that the caller is requesting the most access possible to the object. MaximumAllowed = 0x02000000 # Specifies access to the system security portion of the security descriptor. AccessSystemSecurity = 0x01000000 # Specifies the ability to update the Owner field of the security descriptor. WriteOwner = 0x00080000 # Specifies the ability to update the discretionary access control list (DACL) of the security descriptor. WriteDacl = 0x00040000 # Specifies the ability to read the security descriptor. ReadControl = 0x00020000 # Specifies the ability to delete the object. Delete = 0x00010000 pydsinternals-1.2.5/dsinternals/sam/interop/enums/SamDomainAccessMask.py000077500000000000000000000047451513773544400265450ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SamDomainAccessMask.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamDomainAccessMask(Enum): """ SamDomainAccessMask These are the specific values available to describe the access control on a domain object. See: https://msdn.microsoft.com/en-us/library/cc245522.aspx """ # Specifies access control to read password policy. ReadPasswordParameters = 0x00000001 # Specifies access control to write password policy. WritePasswordParameters = 0x00000002 # Specifies access control to read attributes not related to password policy. ReadOtherParameters = 0x00000004 # Specifies access control to write attributes not related to password policy. WriteOtherParameters = 0x00000008 # Specifies access control to create a user object. CreateUser = 0x00000010 # Specifies access control to create a group object. CreateGroup = 0x00000020 # Specifies access control to create an alias object. CreateAlias = 0x00000040 # Specifies access control to read the alias membership of a set of SIDs. GetAliasMembership = 0x00000080 # Specifies access control to enumerate objects. ListAccounts = 0x00000100 # Specifies access control to look up objects by name and SID. Lookup = 0x00000200 # Specifies access control to various administrative operations on the server. AdministerServer = 0x00000400 # The specified accesses for a GENERIC_ALL request. AllAccess = 0x000F07FF # The specified accesses for a GENERIC_READ request. Read = 0x00020084 # The specified accesses for a GENERIC_WRITE request. Write = 0x0002047A # The specified accesses for a GENERIC_EXECUTE request. Execute = 0x00020301 # Indicates that the caller is requesting the most access possible to the object. MaximumAllowed = 0x02000000 # Specifies access to the system security portion of the security descriptor. AccessSystemSecurity = 0x01000000 # Specifies the ability to update the Owner field of the security descriptor. WriteOwner = 0x00080000 # Specifies the ability to update the discretionary access control list (DACL) of the security descriptor. WriteDacl = 0x00040000 # Specifies the ability to read the security descriptor. ReadControl = 0x00020000 # Specifies the ability to delete the object. Delete = 0x00010000 pydsinternals-1.2.5/dsinternals/sam/interop/enums/SamDomainInformationClass.py000077500000000000000000000015221513773544400277710ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SamDomainInformationClass.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamDomainInformationClass(Enum): """ SamDomainInformationClass The DOMAIN_INFORMATION_CLASS enumeration indicates how to interpret the Buffer parameter for SamrSetInformationDomain and SamrQueryInformationDomain. See: https://msdn.microsoft.com/en-us/library/cc245570.aspx """ PasswordInformation = 1 GeneralInformation = 2 LogoffInformation = 3 OemInformation = 4 NameInformation = 5 ReplicationInformation = 6 ServerRoleInformation = 7 ModifiedInformation = 8 StateInformation = 9 GeneralInformation2 = 11 LockoutInformation = 12 ModifiedInformation2 = 13 pydsinternals-1.2.5/dsinternals/sam/interop/enums/SamDomainPasswordProperties.py000077500000000000000000000025551513773544400304040ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SamDomainPasswordProperties.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamDomainPasswordProperties(Enum): """ SamDomainPasswordProperties Flags that describe the password properties. """ # No flags are set. NONE = 0 # The password must have a mix of at least two of the following types of characters: Uppercase characters, Lowercase characters, Numerals PasswordComplexity = 0x00000001 # The password cannot be changed without logging on. Otherwise, if your password has expired, you can change your password and then log on. RequireLogonToChangePassword = 0x00000002 # Forces the client to use a protocol that does not allow the domain controller to get the plaintext password. NoClearChange = 0x00000004 # Allows the built-in administrator account to be locked out from network logons. LockoutAdmins = 0x00000008 # The directory service is storing a plaintext password for all users instead of a hash function of the password. ClearTextPassword = 0x00000010 # Removes the requirement that the machine account password be automatically changed every week. # This value should not be used as it can weaken security. RefuseMachinePasswordChange = 0x00000020 pydsinternals-1.2.5/dsinternals/sam/interop/enums/SamServerAccessMask.py000077500000000000000000000036731513773544400266030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SamServerAccessMask.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamServerAccessMask(Enum): # Server Access Mask # # These are the specific values available to describe the access control on a server object. # # See: https://msdn.microsoft.com/en-us/library/cc245521.aspx # Specifies access control to obtain a server handle. Connect = 0x00000001 # Does not specify any access control. Shutdown = 0x00000002 # Does not specify any access control. Initialize = 0x00000004 # Does not specify any access control. CreateDomain = 0x00000008 # Specifies access control to view domain objects. EnumerateDomains = 0x00000010 # Specifies access control to perform SID-to-name translation. LookupDomain = 0x00000020 # The specified accesses for a GENERIC_ALL request. AllAccess = 0x000F003F # The specified accesses for a GENERIC_READ request. Read = 0x00020010 # The specified accesses for a GENERIC_WRITE request. Write = 0x0002000E # The specified accesses for a GENERIC_EXECUTE request. Execute = 0x00020021 # Indicates that the caller is requesting the most access possible to the object. MaximumAllowed = 0x02000000 # Specifies access to the system security portion of the security descriptor. AccessSystemSecurity = 0x01000000 # Specifies the ability to update the Owner field of the security descriptor. WriteOwner = 0x00080000 # Specifies the ability to update the discretionary access control list (DACL) of the security descriptor. WriteDacl = 0x00040000 # Specifies the ability to read the security descriptor. ReadControl = 0x00020000 # Specifies the ability to delete the object. Delete = 0x00010000 pydsinternals-1.2.5/dsinternals/sam/interop/enums/SamSidType.py000077500000000000000000000010001513773544400247360ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SamSidType.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamSidType(Enum): """ SamSidType See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa379601%28v=vs.85%29.aspx """ User = 1 Group = 2 Domain = 3 Alias = 4 WellKnownGroup = 5 DeletedAccount = 6 Invalid = 7 Unknown = 8 Computer = 9 Label = 10 pydsinternals-1.2.5/dsinternals/sam/interop/enums/SamUserAccessMask.py000077500000000000000000000047341513773544400262520ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SamUserAccessMask.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamUserAccessMask(Enum): """ User Access Mask These are the specific values available to describe the access control on a user object. See: https://msdn.microsoft.com/en-us/library/cc245525.aspx """ # Specifies the ability to read sundry attributes. ReadGeneral = 0x00000001 # Specifies the ability to read general information attributes. ReadPreferences = 0x00000002 # Specifies the ability to write general information attributes. WritePreferences = 0x00000004 # Specifies the ability to read attributes related to logon statistics. ReadLogon = 0x00000008 # Specifies the ability to read attributes related to the administration of the user object. ReadAccount = 0x00000010 # Specifies the ability to write attributes related to the administration of the user object. WriteAccount = 0x00000020 # Specifies the ability to change the user's password. ChangePassword = 0x00000040 # Specifies the ability to set the user's password. ForcePasswordChange = 0x00000080 # Specifies the ability to query the membership of the user object. ListGroups = 0x00000100 # Does not specify any access control. ReadGroupInformation = 0x00000200 # Does not specify any access control. WriteGroupInformation = 0x00000400 # The specified accesses for a GENERIC_ALL request. AllAccess = 0x000F07FF # The specified accesses for a GENERIC_READ request. Read = 0x0002031A # The specified accesses for a GENERIC_WRITE request. Write = 0x00020044 # The specified accesses for a GENERIC_EXECUTE request. Execute = 0x00020041 # Indicates that the caller is requesting the most access possible to the object. MaximumAllowed = 0x02000000 # Specifies access to the system security portion of the security descriptor. AccessSystemSecurity = 0x01000000 # Specifies the ability to update the Owner field of the security descriptor. WriteOwner = 0x00080000 # Specifies the ability to update the discretionary access control list (DACL) of the security descriptor. WriteDacl = 0x00040000 # Specifies the ability to read the security descriptor. ReadControl = 0x00020000 # Specifies the ability to delete the object. Delete = 0x00010000 pydsinternals-1.2.5/dsinternals/sam/interop/enums/SamUserInformationClass.py000077500000000000000000000023151513773544400275010ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : SamUserInformationClass.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 from enum import Enum class SamUserInformationClass(Enum): """User Information Class The USER_INFORMATION_CLASS enumeration indicates how to interpret the Buffer parameter for SamrSetInformationUser, SamrQueryInformationUser, SamrSetInformationUser2, and SamrQueryInformationUser2. See: https://msdn.microsoft.com/en-us/library/cc245617.aspx """ GeneralInformation = 1 PreferencesInformation = 2 LogonInformation = 3 LogonHoursInformation = 4 AccountInformation = 5 NameInformation = 6 AccountNameInformation = 7 FullNameInformation = 8 PrimaryGroupInformation = 9 HomeInformation = 10 ScriptInformation = 11 ProfileInformation = 12 AdminCommentInformation = 13 WorkStationsInformation = 14 ControlInformation = 16 ExpiresInformation = 17 Internal1Information = 18 ParametersInformation = 20 AllInformation = 21 Internal4Information = 23 Internal5Information = 24 Internal4InformationNew = 25 Internal5InformationNew = 26 pydsinternals-1.2.5/dsinternals/sam/interop/enums/__init__.py000077500000000000000000000002501513773544400244610ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/interop/nativemethods/000077500000000000000000000000001513773544400240735ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/interop/nativemethods/__init__.py000077500000000000000000000002501513773544400262040ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/interop/safehandles/000077500000000000000000000000001513773544400234765ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/interop/safehandles/__init__.py000077500000000000000000000002501513773544400256070ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/interop/structs/000077500000000000000000000000001513773544400227305ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/interop/structs/__init__.py000077500000000000000000000002501513773544400250410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/properties/000077500000000000000000000000001513773544400217355ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/properties/__init__.py000077500000000000000000000002501513773544400240460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/test/000077500000000000000000000000001513773544400205205ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/test/__init__.py000077500000000000000000000002501513773544400226310ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/test/properties/000077500000000000000000000000001513773544400227145ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/test/properties/__init__.py000077500000000000000000000002501513773544400250250ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/sam/wrappers/000077500000000000000000000000001513773544400214045ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/sam/wrappers/__init__.py000077500000000000000000000002501513773544400235150ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 31 Jul 2021 pydsinternals-1.2.5/dsinternals/system/000077500000000000000000000000001513773544400203055ustar00rootroot00000000000000pydsinternals-1.2.5/dsinternals/system/DateTime.py000077500000000000000000000023201513773544400223530ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : DateTime.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 import datetime import time class DateTime(object): """ Documentation for class DateTime https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=net-5.0 """ def __init__(self, ticks: int = 0): if ticks == 0: self.Value = datetime.datetime.now() # diff 1601 - epoch diff = datetime.datetime(1970, 1, 1, 0, 0, 0) - datetime.datetime(1601, 1, 1, 0, 0, 0) # nanoseconds between 1601 and epoch diff_ns = int(diff.total_seconds()) * 1000000000 # nanoseconds between epoch and now now_ns = time.time_ns() # ticks between 1601 and now ticks = (diff_ns + now_ns) // 100 self.ticks = ticks else: self.Value = datetime.datetime(1601, 1, 1, 0, 0, 0) + datetime.timedelta(seconds=ticks / 1e7) self.ticks = ticks def toUniversalTime(self): return self.Value.utcnow() def toTicks(self): return self.ticks def __repr__(self): return str(self.Value) pydsinternals-1.2.5/dsinternals/system/Guid.py000077500000000000000000000255501513773544400215610ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : Guid.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 import re import struct import binascii import random from enum import Enum class GuidFormat(Enum): """ N => 32 digits : 00000000000000000000000000000000 D => 32 digits separated by hyphens : 00000000-0000-0000-0000-000000000000 B => 32 digits separated by hyphens, enclosed in braces : {00000000-0000-0000-0000-000000000000} P => 32 digits separated by hyphens, enclosed in parentheses : (00000000-0000-0000-0000-000000000000) X => Four hexadecimal values enclosed in braces, where the fourth value is a subset of eight hexadecimal values that is also enclosed in braces : {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} """ N = 0 D = 1 B = 2 P = 3 X = 4 class GuidImportFormatPattern(Enum): """ N => 32 digits : 00000000000000000000000000000000 D => 32 digits separated by hyphens : 00000000-0000-0000-0000-000000000000 B => 32 digits separated by hyphens, enclosed in braces : {00000000-0000-0000-0000-000000000000} P => 32 digits separated by hyphens, enclosed in parentheses : (00000000-0000-0000-0000-000000000000) X => Four hexadecimal values enclosed in braces, where the fourth value is a subset of eight hexadecimal values that is also enclosed in braces : {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} """ N = "^([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$" D = "^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$" B = "^{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})}$" P = "^\\(([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\\)$" X = "^{0x([0-9a-f]{8}),0x([0-9a-f]{4}),0x([0-9a-f]{4}),{0x([0-9a-f]{2}),0x([0-9a-f]{2}),0x([0-9a-f]{2}),0x([0-9a-f]{2}),0x([0-9a-f]{2}),0x([0-9a-f]{2}),0x([0-9a-f]{2}),0x([0-9a-f]{2})}}$" class InvalidGuidFormat(Exception): pass class Guid(object): """ Guid See: https://docs.microsoft.com/en-us/dotnet/api/system.guid?view=net-5.0 """ Format: GuidFormat = None def __init__(self, a=None, b=None, c=None, d=None, e=None): super(Guid, self).__init__() if a is None: a = sum([random.randint(0, 0xff) << (8*k) for k in range(4)]) if b is None: b = sum([random.randint(0, 0xff) << (8*k) for k in range(2)]) if c is None: c = sum([random.randint(0, 0xff) << (8*k) for k in range(2)]) if d is None: d = sum([random.randint(0, 0xff) << (8*k) for k in range(2)]) if e is None: e = sum([random.randint(0, 0xff) << (8*k) for k in range(6)]) self.a, self.b, self.c, self.d, self.e = a, b, c, d, e @classmethod def load(cls, data): self = None if type(data) == bytes and len(data) == 16: return Guid.fromRawBytes(data) elif type(data) == str: matched = re.match(GuidImportFormatPattern.X.value, data, re.IGNORECASE) if matched is not None: self = cls.fromFormatX(matched.group(0)) self.Format = GuidFormat.X return self matched = re.match(GuidImportFormatPattern.P.value, data, re.IGNORECASE) if matched is not None: self = cls.fromFormatP(matched.group(0)) self.Format = GuidFormat.P return self matched = re.match(GuidImportFormatPattern.D.value, data, re.IGNORECASE) if matched is not None: self = cls.fromFormatD(matched.group(0)) self.Format = GuidFormat.D return self matched = re.match(GuidImportFormatPattern.B.value, data, re.IGNORECASE) if matched is not None: self = cls.fromFormatB(matched.group(0)) self.Format = GuidFormat.B return self matched = re.match(GuidImportFormatPattern.N.value, data, re.IGNORECASE) if matched is not None: self = cls.fromFormatN(matched.group(0)) self.Format = GuidFormat.N return self return self # Import formats @classmethod def fromRawBytes(cls, data: bytes): if len(data) != 16: raise InvalidGuidFormat("fromRawBytes takes exactly 16 bytes of data in input") # 0xffffff a = struct.unpack("H", data[8:10])[0] # 0xffffffffffff e = binascii.hexlify(data[10:16]).decode("UTF-8").rjust(6, '0') e = int(e, 16) self = cls(a, b, c, d, e) return self @classmethod def fromFormatN(cls, data): # N => 32 digits : 00000000000000000000000000000000 if not re.match(GuidImportFormatPattern.N.value, data, re.IGNORECASE): raise InvalidGuidFormat("Guid Format N should be 32 hexadecimal characters separated in five parts.") a = int(data[0:8], 16) b = int(data[8:12], 16) c = int(data[12:16], 16) d = int(data[16:20], 16) e = int(data[20:32], 16) self = cls(a, b, c, d, e) return self @classmethod def fromFormatD(cls, data): # D => 32 digits separated by hyphens : # 00000000-0000-0000-0000-000000000000 if not re.match(GuidImportFormatPattern.D.value, data, re.IGNORECASE): raise InvalidGuidFormat("Guid Format D should be 32 hexadecimal characters separated in five parts.") a, b, c, d, e = map(lambda x: int(x, 16), data.split("-")) self = cls(a, b, c, d, e) return self @classmethod def fromFormatB(cls, data): # B => 32 digits separated by hyphens, enclosed in braces : # {00000000-0000-0000-0000-000000000000} if not re.match(GuidImportFormatPattern.B.value, data, re.IGNORECASE): raise InvalidGuidFormat("Guid Format B should be 32 hexadecimal characters separated in five parts enclosed in braces.") a, b, c, d, e = map(lambda x: int(x, 16), data[1:-1].split("-")) self = cls(a, b, c, d, e) return self @classmethod def fromFormatP(cls, data): # P => 32 digits separated by hyphens, enclosed in parentheses : # (00000000-0000-0000-0000-000000000000) if not re.match(GuidImportFormatPattern.P.value, data, re.IGNORECASE): raise InvalidGuidFormat("Guid Format P should be 32 hexadecimal characters separated in five parts enclosed in parentheses.") a, b, c, d, e = map(lambda x: int(x, 16), data[1:-1].split("-")) self = cls(a, b, c, d, e) return self @classmethod def fromFormatX(cls, data): # X => Four hexadecimal values enclosed in braces, where the fourth value is a subset of # eight hexadecimal values that is also enclosed in braces : # {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} if not re.match(GuidImportFormatPattern.X.value, data, re.IGNORECASE): raise InvalidGuidFormat("Guid Format X should be in this format {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}.") hex_a, hex_b, hex_c, rest = data[1:-1].split(',', 3) rest = rest[1:-1].split(',') a = int(hex_a, 16) b = int(hex_b, 16) c = int(hex_c, 16) d = int(rest[0], 16) * 0x100 + int(rest[1], 16) e = int(rest[2], 16) * (0x1 << (8 * 5)) e += int(rest[3], 16) * (0x1 << (8 * 4)) e += int(rest[4], 16) * (0x1 << (8 * 3)) e += int(rest[5], 16) * (0x1 << (8 * 2)) e += int(rest[6], 16) * (0x1 << 8) e += int(rest[7], 16) self = cls(a, b, c, d, e) return self # Export formats def toRawBytes(self): data = b'' data += struct.pack("H", self.d) data += binascii.unhexlify(hex(self.e)[2:].rjust(12, '0')) return data def toFormatN(self) -> str: # N => 32 digits : # 00000000000000000000000000000000 hex_a = hex(self.a)[2:].rjust(8, '0') hex_b = hex(self.b)[2:].rjust(4, '0') hex_c = hex(self.c)[2:].rjust(4, '0') hex_d = hex(self.d)[2:].rjust(4, '0') hex_e = hex(self.e)[2:].rjust(12, '0') return "%s%s%s%s%s" % (hex_a, hex_b, hex_c, hex_d, hex_e) def toFormatD(self) -> str: # D => 32 digits separated by hyphens : # 00000000-0000-0000-0000-000000000000 hex_a = hex(self.a)[2:].rjust(8, '0') hex_b = hex(self.b)[2:].rjust(4, '0') hex_c = hex(self.c)[2:].rjust(4, '0') hex_d = hex(self.d)[2:].rjust(4, '0') hex_e = hex(self.e)[2:].rjust(12, '0') return "%s-%s-%s-%s-%s" % (hex_a, hex_b, hex_c, hex_d, hex_e) def toFormatB(self) -> str: # B => 32 digits separated by hyphens, enclosed in braces : # {00000000-0000-0000-0000-000000000000} hex_a = hex(self.a)[2:].rjust(8, '0') hex_b = hex(self.b)[2:].rjust(4, '0') hex_c = hex(self.c)[2:].rjust(4, '0') hex_d = hex(self.d)[2:].rjust(4, '0') hex_e = hex(self.e)[2:].rjust(12, '0') return "{%s-%s-%s-%s-%s}" % (hex_a, hex_b, hex_c, hex_d, hex_e) def toFormatP(self) -> str: # P => 32 digits separated by hyphens, enclosed in parentheses : # (00000000-0000-0000-0000-000000000000) hex_a = hex(self.a)[2:].rjust(8, '0') hex_b = hex(self.b)[2:].rjust(4, '0') hex_c = hex(self.c)[2:].rjust(4, '0') hex_d = hex(self.d)[2:].rjust(4, '0') hex_e = hex(self.e)[2:].rjust(12, '0') return "(%s-%s-%s-%s-%s)" % (hex_a, hex_b, hex_c, hex_d, hex_e) def toFormatX(self) -> str: # X => Four hexadecimal values enclosed in braces, where the fourth value is a subset of # eight hexadecimal values that is also enclosed in braces : # {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} hex_a = hex(self.a)[2:].rjust(8, '0') hex_b = hex(self.b)[2:].rjust(4, '0') hex_c = hex(self.c)[2:].rjust(4, '0') hex_d = hex(self.d)[2:].rjust(4, '0') hex_d1, hex_d2 = hex_d[:2], hex_d[2:4] hex_e = hex(self.e)[2:].rjust(12, '0') hex_e1, hex_e2, hex_e3, hex_e4, hex_e5, hex_e6 = hex_e[:2], hex_e[2:4], hex_e[4:6], hex_e[6:8], hex_e[8:10], hex_e[10:12] return "{0x%s,0x%s,0x%s,{0x%s,0x%s,0x%s,0x%s,0x%s,0x%s,0x%s,0x%s}}" % (hex_a, hex_b, hex_c, hex_d1, hex_d2, hex_e1, hex_e2, hex_e3, hex_e4, hex_e5, hex_e6) def __repr__(self): return "" % self.toFormatB() pydsinternals-1.2.5/dsinternals/system/__init__.py000077500000000000000000000003351513773544400224220ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : __init__.py # Author : Podalirius (@podalirius_) # Date created : 29 Jul 2021 from .Guid import Guid from .DateTime import DateTime pydsinternals-1.2.5/requirements.txt000077500000000000000000000000301513773544400177130ustar00rootroot00000000000000pyopenssl pycryptodomex pydsinternals-1.2.5/setup.cfg000066400000000000000000000013551513773544400162600ustar00rootroot00000000000000[metadata] name = dsinternals version = 1.2.5 description = Directory Services Internals Library url = http://github.com/p0dalirius/pydsinternals author = Podalirius author_email = podalirius@protonmail.com long_description = file:README.md long_description_content_type = text/markdown license_expression = MIT license_files = LICENSE classifiers = Programming Language :: Python :: 3 Operating System :: OS Independent [options] python_requires = >=3.4 install_requires = pyopenssl pycryptodomex packages = find_namespace [options.packages.find] exclude = tests [tox:tox] min_version = 1.4 env_list = py311 py310 py39 py36 type [testenv] deps = commands = python3 -m unittest discover -v pydsinternals-1.2.5/setup.py000077500000000000000000000016171513773544400161550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : setup.py # Author : Podalirius (@podalirius_) # Date created : 28 Jul 2021 import setuptools with open("README.md", "r") as fh: long_description = fh.read() setuptools.setup( name='dsinternals', version='1.2.5', description='Directory Services Internals Library', url='http://github.com/p0dalirius/pydsinternals', author='Podalirius', long_description=long_description, long_description_content_type="text/markdown", author_email='podalirius@protonmail.com', packages=setuptools.find_packages(exclude=["tests*", "tests.*"]), license_expression='MIT', classifiers=[ "Programming Language :: Python :: 3", "Operating System :: OS Independent", ], python_requires='>=3.4', install_requires=[ 'pyopenssl', 'pycryptodomex', ], ) pydsinternals-1.2.5/tests/000077500000000000000000000000001513773544400155755ustar00rootroot00000000000000pydsinternals-1.2.5/tests/__init__.py000077500000000000000000000000001513773544400176770ustar00rootroot00000000000000pydsinternals-1.2.5/tests/testDNWithBinary.py000077500000000000000000000073621513773544400213640ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : # Author : # Date created : # Date last modified : # Python Version : 3.* import binascii import unittest from dsinternals.common.data.DNWithBinary import DNWithBinary from dsinternals.common.data.DNWithBinary import InvalidNumberOfPartsInRawDNWithBinary, InvalidBinaryDataLength, EmptyRawDNWithBinary class TestCaseDNWithBinary(unittest.TestCase): def test_parse_good_data(self): data = b"B:828:00020000200001293CDE5195FE34E2D6D7E385AE8E36EC0883CE457613458D679726E3DD8864C92000024042781613BB48B19CBEB46CD2EDB49C9FBADB5A6185DB01D1CCBBD32CF8EE591B0103525341310008000003000000000100000000000000000000010001CB56D3816B78DC0DB5BA3A766FFDA0E35902A8BD92EE38BCCA85A29838D4ADDB00BA2138D3BB89091CAC112D3DAE845E8A4DC4209DAA1357812996A2252C29B419DEC0C9EA38376F97AC1AB337868D42A534B135322045CAE9C5239E092FCA893173C64EAC11D470D0D88699D37CEE0D37C5B808328F9CB9DF432D9CCEAFABA97D276096522E17A60AEDEA41844D2AF6AF73E89326298F7A87F877856297500B97B1432F7A05BAA534734673B7B53F682D7E6C08D45BACE97BDB0392E44AA1BBD04DB646C53835A9C9BC5D9DE1A7EB5856079573B57E2E8CE652254765D8FD2ED9FD419D45529C00D81B7EDDD4BD5B8FAF2EA202ED8D9058591C016BB4F3E1E501000401010005001000064BA1D5AD9EE59242864067D70B9E9DC70200070100080008D5AF88AE717ED701080009D5AF88AE717ED701:CN=user2,CN=Users,DC=domain,DC=local" dnb = DNWithBinary.fromRawDNWithBinary(data) self.assertEqual(dnb.DistinguishedName, b"CN=user2,CN=Users,DC=domain,DC=local") self.assertEqual(dnb.BinaryData, binascii.unhexlify("00020000200001293CDE5195FE34E2D6D7E385AE8E36EC0883CE457613458D679726E3DD8864C92000024042781613BB48B19CBEB46CD2EDB49C9FBADB5A6185DB01D1CCBBD32CF8EE591B0103525341310008000003000000000100000000000000000000010001CB56D3816B78DC0DB5BA3A766FFDA0E35902A8BD92EE38BCCA85A29838D4ADDB00BA2138D3BB89091CAC112D3DAE845E8A4DC4209DAA1357812996A2252C29B419DEC0C9EA38376F97AC1AB337868D42A534B135322045CAE9C5239E092FCA893173C64EAC11D470D0D88699D37CEE0D37C5B808328F9CB9DF432D9CCEAFABA97D276096522E17A60AEDEA41844D2AF6AF73E89326298F7A87F877856297500B97B1432F7A05BAA534734673B7B53F682D7E6C08D45BACE97BDB0392E44AA1BBD04DB646C53835A9C9BC5D9DE1A7EB5856079573B57E2E8CE652254765D8FD2ED9FD419D45529C00D81B7EDDD4BD5B8FAF2EA202ED8D9058591C016BB4F3E1E501000401010005001000064BA1D5AD9EE59242864067D70B9E9DC70200070100080008D5AF88AE717ED701080009D5AF88AE717ED701")) def test_error_parse_empty_data(self): data = b"" self.assertRaises(EmptyRawDNWithBinary, DNWithBinary.fromRawDNWithBinary, data) def test_error_parse_not_4_parts_of_data(self): data = b"B:1234:Wow" self.assertRaises(InvalidNumberOfPartsInRawDNWithBinary, DNWithBinary.fromRawDNWithBinary, data) def test_error_parse_invalid_data_length(self): data = b"B:827:00020000200001293CDE5195FE34E2D6D7E385AE8E36EC0883CE457613458D679726E3DD8864C92000024042781613BB48B19CBEB46CD2EDB49C9FBADB5A6185DB01D1CCBBD32CF8EE591B0103525341310008000003000000000100000000000000000000010001CB56D3816B78DC0DB5BA3A766FFDA0E35902A8BD92EE38BCCA85A29838D4ADDB00BA2138D3BB89091CAC112D3DAE845E8A4DC4209DAA1357812996A2252C29B419DEC0C9EA38376F97AC1AB337868D42A534B135322045CAE9C5239E092FCA893173C64EAC11D470D0D88699D37CEE0D37C5B808328F9CB9DF432D9CCEAFABA97D276096522E17A60AEDEA41844D2AF6AF73E89326298F7A87F877856297500B97B1432F7A05BAA534734673B7B53F682D7E6C08D45BACE97BDB0392E44AA1BBD04DB646C53835A9C9BC5D9DE1A7EB5856079573B57E2E8CE652254765D8FD2ED9FD419D45529C00D81B7EDDD4BD5B8FAF2EA202ED8D9058591C016BB4F3E1E501000401010005001000064BA1D5AD9EE59242864067D70B9E9DC70200070100080008D5AF88AE717ED701080009D5AF88AE717ED701:CN=user2,CN=Users,DC=domain,DC=local" self.assertRaises(InvalidBinaryDataLength, DNWithBinary.fromRawDNWithBinary, data) if __name__ == '__main__': unittest.main() pydsinternals-1.2.5/tests/testGuid.py000077500000000000000000000153401513773544400177450ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : # Author : Podalirius (@podalirius_) from dsinternals.system.Guid import Guid import unittest class TestCaseGuid(unittest.TestCase): def test_load_guid_from_format_N(self): g = Guid.fromFormatN("fedcba981234abcdffff87ff87acef87") self.assertEqual(g.a, 0xfedcba98) self.assertEqual(g.b, 0x1234) self.assertEqual(g.c, 0xabcd) self.assertEqual(g.d, 0xffff) self.assertEqual(g.e, 0x87ff87acef87) def test_load_guid_from_format_D(self): g = Guid.fromFormatD("fedcba98-1234-abcd-ffff-87ff87acef87") self.assertEqual(g.a, 0xfedcba98) self.assertEqual(g.b, 0x1234) self.assertEqual(g.c, 0xabcd) self.assertEqual(g.d, 0xffff) self.assertEqual(g.e, 0x87ff87acef87) def test_load_guid_from_format_P(self): g = Guid.fromFormatP("(fedcba98-1234-abcd-ffff-87ff87acef87)") self.assertEqual(g.a, 0xfedcba98) self.assertEqual(g.b, 0x1234) self.assertEqual(g.c, 0xabcd) self.assertEqual(g.d, 0xffff) self.assertEqual(g.e, 0x87ff87acef87) def test_load_guid_from_format_B(self): g = Guid.fromFormatB("{fedcba98-1234-abcd-ffff-87ff87acef87}") self.assertEqual(g.a, 0xfedcba98) self.assertEqual(g.b, 0x1234) self.assertEqual(g.c, 0xabcd) self.assertEqual(g.d, 0xffff) self.assertEqual(g.e, 0x87ff87acef87) def test_load_guid_from_format_X(self): g = Guid.fromFormatX("{0xfedcba98,0x1234,0xabcd,{0xff,0xff,0x87,0xff,0x87,0xac,0xef,0x87}}") self.assertEqual(g.a, 0xfedcba98) self.assertEqual(g.b, 0x1234) self.assertEqual(g.c, 0xabcd) self.assertEqual(g.d, 0xffff) self.assertEqual(g.e, 0x87ff87acef87) def test_export_guid_to_format_N(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) self.assertEqual(guid_expected.toFormatN(), "fedcba981234abcdffff87ff87acef87") def test_export_guid_to_format_D(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) self.assertEqual(guid_expected.toFormatD(), "fedcba98-1234-abcd-ffff-87ff87acef87") def test_export_guid_to_format_P(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) self.assertEqual(guid_expected.toFormatP(), "(fedcba98-1234-abcd-ffff-87ff87acef87)") def test_export_guid_to_format_B(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) self.assertEqual(guid_expected.toFormatB(), "{fedcba98-1234-abcd-ffff-87ff87acef87}") def test_export_guid_to_format_X(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) self.assertEqual(guid_expected.toFormatX(), "{0xfedcba98,0x1234,0xabcd,{0xff,0xff,0x87,0xff,0x87,0xac,0xef,0x87}}") def test_import_export_involution_format_N(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) guid_generated = Guid.fromFormatN(guid_expected.toFormatN()) self.assertEqual(guid_generated.a, guid_expected.a) self.assertEqual(guid_generated.b, guid_expected.b) self.assertEqual(guid_generated.c, guid_expected.c) self.assertEqual(guid_generated.d, guid_expected.d) self.assertEqual(guid_generated.e, guid_expected.e) def test_import_export_involution_format_D(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) guid_generated = Guid.fromFormatD(guid_expected.toFormatD()) self.assertEqual(guid_generated.a, guid_expected.a) self.assertEqual(guid_generated.b, guid_expected.b) self.assertEqual(guid_generated.c, guid_expected.c) self.assertEqual(guid_generated.d, guid_expected.d) self.assertEqual(guid_generated.e, guid_expected.e) def test_import_export_involution_format_P(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) guid_generated = Guid.fromFormatP(guid_expected.toFormatP()) self.assertEqual(guid_generated.a, guid_expected.a) self.assertEqual(guid_generated.b, guid_expected.b) self.assertEqual(guid_generated.c, guid_expected.c) self.assertEqual(guid_generated.d, guid_expected.d) self.assertEqual(guid_generated.e, guid_expected.e) def test_import_export_involution_format_B(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) guid_generated = Guid.fromFormatB(guid_expected.toFormatB()) self.assertEqual(guid_generated.a, guid_expected.a) self.assertEqual(guid_generated.b, guid_expected.b) self.assertEqual(guid_generated.c, guid_expected.c) self.assertEqual(guid_generated.d, guid_expected.d) self.assertEqual(guid_generated.e, guid_expected.e) def test_import_export_involution_format_X(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) guid_generated = Guid.fromFormatX(guid_expected.toFormatX()) self.assertEqual(guid_generated.a, guid_expected.a) self.assertEqual(guid_generated.b, guid_expected.b) self.assertEqual(guid_generated.c, guid_expected.c) self.assertEqual(guid_generated.d, guid_expected.d) self.assertEqual(guid_generated.e, guid_expected.e) def test_import_export_involution_rawbytes(self): guid_expected = Guid(0xfedcba98, 0x1234, 0xabcd, 0xffff, 0x87ff87acef87) guid_generated = Guid.fromRawBytes(guid_expected.toRawBytes()) self.assertEqual(guid_generated.a, guid_expected.a) self.assertEqual(guid_generated.b, guid_expected.b) self.assertEqual(guid_generated.c, guid_expected.c) self.assertEqual(guid_generated.d, guid_expected.d) self.assertEqual(guid_generated.e, guid_expected.e) def test_random_guid_range_of_values(self): g = Guid() self.assertGreaterEqual(g.a, 0) self.assertLessEqual(g.a, 0x100000000) self.assertGreaterEqual(g.b, 0) self.assertLessEqual(g.b, 0x10000) self.assertGreaterEqual(g.c, 0) self.assertLessEqual(g.c, 0x10000) self.assertGreaterEqual(g.d, 0) self.assertLessEqual(g.d, 0x10000) self.assertGreaterEqual(g.e, 0) self.assertLessEqual(g.e, 0x1000000000000) def test_endianess(self): files = [ "37fb078b-b420-4794-b8d7-c1f707921ecd.raw", "67771cd3-2472-406c-bd20-cc0fff4b65b1.raw", "f5bb4278-5865-42de-92b9-755cad29ad86.raw", "5dd44969-fb10-422a-be43-8dddb68afa0e.raw", "9977796b-79a9-45c4-bc04-d856d1051f78.raw", "f6fcf1cf-ceb9-4c7c-8730-0fc1051781ff.raw" ] if __name__ == '__main__': unittest.main() pydsinternals-1.2.5/tests/testKeyCredentials.py000077500000000000000000000056231513773544400217660ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : # Author : # Date created : # Date last modified : # Python Version : 3.* import binascii from dsinternals.common.data.hello.KeyCredential import KeyCredential from dsinternals.common.data.DNWithBinary import DNWithBinary import unittest class TestCaseKeyCredential(unittest.TestCase): def test_key01(self): rawdnb = b"B:828:00020000200001293CDE5195FE34E2D6D7E385AE8E36EC0883CE457613458D679726E3DD8864C92000024042781613BB48B19CBEB46CD2EDB49C9FBADB5A6185DB01D1CCBBD32CF8EE591B0103525341310008000003000000000100000000000000000000010001CB56D3816B78DC0DB5BA3A766FFDA0E35902A8BD92EE38BCCA85A29838D4ADDB00BA2138D3BB89091CAC112D3DAE845E8A4DC4209DAA1357812996A2252C29B419DEC0C9EA38376F97AC1AB337868D42A534B135322045CAE9C5239E092FCA893173C64EAC11D470D0D88699D37CEE0D37C5B808328F9CB9DF432D9CCEAFABA97D276096522E17A60AEDEA41844D2AF6AF73E89326298F7A87F877856297500B97B1432F7A05BAA534734673B7B53F682D7E6C08D45BACE97BDB0392E44AA1BBD04DB646C53835A9C9BC5D9DE1A7EB5856079573B57E2E8CE652254765D8FD2ED9FD419D45529C00D81B7EDDD4BD5B8FAF2EA202ED8D9058591C016BB4F3E1E501000401010005001000064BA1D5AD9EE59242864067D70B9E9DC70200070100080008D5AF88AE717ED701080009D5AF88AE717ED701:CN=user2,CN=Users,DC=domain,DC=local" kc = KeyCredential.fromDNWithBinary(DNWithBinary.fromRawDNWithBinary(rawdnb)) self.assertEqual(kc.verifyHash(), True) self.assertEqual(kc.Identifier, "KTzeUZX+NOLW1+OFro427AiDzkV2E0WNZ5cm492IZMk=") self.assertEqual(kc.KeyHash, binascii.unhexlify("4042781613bb48b19cbeb46cd2edb49c9fbadb5a6185db01d1ccbbd32cf8ee59")) def test_key02(self): rawdnb = b"B:828:000200002000010931771AA15D0D2C55F90085364F9105A8FF8EF5F7D29EAFB68D25FE9327BAA42000029B7190E48CCBF5985D4C9775B1CFB56BE4153CA99CE4DEE6AC4943EEEC5A86DD1B0103525341310008000003000000000100000000000000000000010001BC8830BAB8E09BF812656E00FA7EEB4D83CF710EB072C4F19F540537CD51756720537BFD157238E92567B68D68AD548758324FBA1FDEE0AA08D3ED9963D03EF9BB4BB8CB9158D7AA767F6BCF52912BDD7FA5C4D3EDBAB481885DC9F0F46C1AF79554128C103869DAFA0847229F59543A2F8AEAF538F30C5634C1B6C87F9F8CCD2E79241503C7754D23E66DA6BAF97CBD3BD4B7964D5FB7EAFEA70B8BB1AF9DB77319F6F9CF0EEBE16AF878A1038BF75CBC73B2E20D4A9F48D64236921D997924DD59E8951F9F6B3A813CEF78D8D386CD9FE1704E0A44F88F5E90265C07F0733143E173CBD4165E890F3B8AC533BF0A8BEBE66560BDB996C408472A33C9E2F87101000401010005001000061D1CC264E8B1894CB93691CFB32548CF0200070100080008ECFFF45A0F7FD701080009ECFFF45A0F7FD701:CN=user2,CN=Users,DC=domain,DC=local" kc = KeyCredential.fromDNWithBinary(DNWithBinary.fromRawDNWithBinary(rawdnb)) self.assertEqual(kc.verifyHash(), True) self.assertEqual(kc.Identifier, "CTF3GqFdDSxV+QCFNk+RBaj/jvX30p6vto0l/pMnuqQ=") self.assertEqual(kc.KeyHash, binascii.unhexlify("9b7190e48ccbf5985d4c9775b1cfb56be4153ca99ce4dee6ac4943eeec5a86dd")) if __name__ == '__main__': unittest.main() pydsinternals-1.2.5/tests/testRSAKeyMaterial.py000077500000000000000000000313741513773544400216370ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # File name : # Author : Podalirius (@podalirius_) import unittest from dsinternals.common.cryptography.RSAKeyMaterial import RSAKeyMaterial class TestCaseGuid(unittest.TestCase): def test_key01(self): key = b"""RSA1\x00\x08\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\xe3\xda\x8b\xe4\xe4\x8cJ\xce\xfeG\xfe\xcc8\x10z\xa4\x93\xa0:\xcd\'P.\x15h\x85\x06\x11\xf9] \t\x98\xf5\xef" \x95Db\x1b\x95\x1f\x1c\xa4\xd1h\x99}\xd0H\xc9\xc9\xfd\xe4\n\xe3\nk\x84>U\x12\xce\xe3{/\xbe\x16\xf2\x98\x9f\xe74\xc27\xf3\xe54_\x9d\xd8\x04?\xc1\x14\xda\xe0\xfc\x8c\xba\xc7\x89\xe6\xb9\x7f\xbc\x1e\xd27\xe3\x15\xb60\xe2t\xd2\xe0\xf8\xa1\x02\xcc\xfc\xf1\xfeL\xd1\xc7\x15\x9a\xda\xcc\xbf\xae\xf7\xbc\xc5\x1d\xe6\xbd\xd3\xa6\x04\xff\xa9V\x01u\x8bZ\xe8\x19=;\xa3jB\x80\xff}]\xcd\xf5\x85Gt5\xd9?T\xf6\xfd\xe6#\x0e\x8e\xe7\x8d\x9a/\x8a\x16 \rT\xc5\xd8\xf8%\xd5F+\x96\xfa\x80\xef\x92\xccEZ\xb9\xae%\x8d\xd3\xee$\xe5=\xb1\xc0\xdc7\xc0\x02\\\xf6z\xbc\xeeg\xb1m\x10\x00G\x1b\xd5\xd4v\xe9\xfakz\xe3\x1bgz\x89}\xb8\xe8\xf8\x9a{e:\xdd\xfc\xc6\x1a+\xe6\x82.\x196\x93\xe1A*\xd2q\xfc\xb7\x85""" rsa = RSAKeyMaterial.fromRawBytes(key) self.assertEqual(rsa.exponent, 0x10001) self.assertEqual(rsa.modulus, 0xe3da8be4e48c4acefe47fecc38107aa493a03acd27502e1568850611f95d200998f5ef22209544621b951f1ca4d168997dd048c9c9fde40ae30a6b843e5512cee37b2fbe16f2989fe734c237f3e5345f9dd8043fc114dae0fc8cbac789e6b97fbc1ed237e315b630e274d2e0f8a102ccfcf1fe4cd1c7159adaccbfaef7bcc51de6bdd3a604ffa95601758b5ae8193d3ba36a4280ff7d5dcdf585477435d93f54f6fde6230e8ee78d9a2f8a16200d54c5d8f825d5462b96fa80ef92cc455ab9ae258dd3ee24e53db1c0dc37c0025cf67abcee67b16d1000471bd5d476e9fa6b7ae31b677a897db8e8f89a7b653addfcc61a2be6822e193693e1412ad271fcb785) self.assertEqual(rsa.prime1, 0) self.assertEqual(rsa.prime2, 0) def test_key02(self): key = b"""RSA1\x00\x08\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x9b\xa9\x0e\x96\xd0\xd5\xd5\xa11H\xdb\xb2\x1a(\x15\x10X\x15V\xb9\x86\xc1\xb0\xeb@Vvh\x1a\x17&0G1\x8a&\x03\r\xf2?9\xaa\xe65\xfe\xa5p{\xd3\x9e\xd1\x94U\x8c\n\xa75\xdf\xef\x14\x00\xdal=R\xab\xb9\x85\xd6a+~D\x1b\x861\xcd\x83\xe0\xefVE`\xbd\xd1\xdd!8%\xee\xa0\xc1H\x98\xb4\x8f\xae\xdc\t\x16<\x1b\xf9\xffnz!SX+\x82\xe1\xd7\xa8+\xb1\xf9;\x1a\x1b?\x9c\xbc\x12\x96\x14\x18\xab0\rX\xf8\x8f\xd0q\xa1T\x06n\x93\x15\xc6]\x14\xb1\xf0p\xb7\xf3\xdc\xac>\x87 \xee\xfe\xeaK\x187fR\xa1\x8e\x8d\x0f{\xe5PW\xe9\xf8H\x8e\xf8K\x1ahj\x9b\xfd5\xa0\x9eQL\xff\xc4\xcd\xc8\\\xb0\xcb\xcdV\xa1<\xdd\xc8V\x8dNd\x1a8\xc2\x99\x96\xfc\xa0\xc1U\xb9&\xba\xd8\xcfy\xa6\xd6;V\xfc\xe6\xc8L\xf3nr\x92\xa5\xed\x97\xc3\x15m\xcc\x1e\xb3\xd5nV\xbb\xc8\xb65Y\xffv\xea\x16wNE\x00\x91""" rsa = RSAKeyMaterial.fromRawBytes(key) self.assertEqual(rsa.exponent, 0x10001) self.assertEqual(rsa.modulus, 0x9ba90e96d0d5d5a13148dbb21a281510581556b986c1b0eb405676681a17263047318a26030df23f39aae635fea5707bd39ed194558c0aa735dfef1400da6c3d52abb985d6612b7e441b8631cd83e0ef564560bdd1dd213825eea0c14898b48faedc09163c1bf9ff6e7a2153582b82e1d7a82bb1f93b1a1b3f9cbc12961418ab300d58f88fd071a154066e9315c65d14b1f070b7f3dcac3e8720eefeea4b18376652a18e8d0f7be55057e9f8488ef84b1a686a9bfd35a09e514cffc4cdc85cb0cbcd56a13cddc8568d4e641a38c29996fca0c155b926bad8cf79a6d63b56fce6c84cf36e7292a5ed97c3156dcc1eb3d56e56bbc8b63559ff76ea16774e450091) self.assertEqual(rsa.prime1, 0) self.assertEqual(rsa.prime2, 0) def test_key03(self): key = b"""RSA1\x00\x08\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\xc9\xc9\xd8\x83\x98z\x0e\xbd\x0f\x9fc\rl\'\xa3\xa4Li\xb1\xf8{\xd3gyg\xc9\xb6\xd5\n7\xe2\x07^\xa1\xc3E\xaav\xb5\xa8\xb6K\x995\xa4\x90\xcd\xa5\x04\x8b\xc8oU\xa2\x18\xa6P*l\x00 \xd5\xf8\xc67\x02!\xc7\xc0Dt\xddj%\xab\xcft\xe8\xadJ?\xbe\xc9\xfd\xa9\xfa\xad\xd8\xde\xbf\xd3\x91s%\xfc\xc8o`C\x8d\xe6\x99\xd9\xfe\'\xcd#S\xf7\x1b\xca\x1b1\xc2R`\x0ez\xabEE\xef\xc0H\xc7\x98\xff\xb1\x03.@\x91\xf8\x07\xd9\x96\xa9c\xa4$\x02\xa2V\xd0\x86\x1cY\xa0b\t\xfb\xe3\xa2y\xba\n\xa2p52\x90\x7f\x90\x1a\x0e\\\x16\x94\xea.)\xc9yW\xf7\x05J\xf6\x9cB\x1e\xce;\xaf\x07\xc9\x86A\xab\xcf\x91d|7\xc6\xedgl\xcf\xb7\xae:\xd6\xf3\xc7X;\x83\xb6\xb9}\xcf\x13\xba{\xf2\xd4"S-\xf33N\xfa!\xd67J\x86&\xb9\x1d\x85\xda\x91*\x06\xb8%\x06\xaf\xa8\xc9\x12\x1c\xe0\xa1\xd5\x9cP\xfb\xad(\x8cP\xb5""" rsa = RSAKeyMaterial.fromRawBytes(key) self.assertEqual(rsa.exponent, 0x10001) self.assertEqual(rsa.modulus, 0xc9c9d883987a0ebd0f9f630d6c27a3a44c69b1f87bd3677967c9b6d50a37e2075ea1c345aa76b5a8b64b9935a490cda5048bc86f55a218a6502a6c0020d5f8c6370221c7c04474dd6a25abcf74e8ad4a3fbec9fda9faadd8debfd3917325fcc86f60438de699d9fe27cd2353f71bca1b31c252600e7aab4545efc048c798ffb1032e4091f807d996a963a42402a256d0861c59a06209fbe3a279ba0aa2703532907f901a0e5c1694ea2e29c97957f7054af69c421ece3baf07c98641abcf91647c37c6ed676ccfb7ae3ad6f3c7583b83b6b97dcf13ba7bf2d422532df3334efa21d6374a8626b91d85da912a06b82506afa8c9121ce0a1d59c50fbad288c50b5) self.assertEqual(rsa.prime1, 0) self.assertEqual(rsa.prime2, 0) def test_key04(self): key = b"""RSA1\x00\x08\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\xc9\x93gZ\xcc\x10\x0cdw\x00\x13\xd9v\xde\x1513j\xb5xW\xe5j\x8f\x02$\x82:Kb\x01X\x8au\xc748\x0c\'\x13#\x99j\x8be1\xaf\xbe\x8e\xf7\xfe5|\xcdq\x1f\xda\xbdI~\x87\xd4|\xe8JF\xf2\xed\\\xe3\xd0t<\xd3T\x92F\xe9\x15r\x83\x85\xa4\xa0\xca\xd0%\t\xd1\xfe\xa4N\x06\xfc\xc5\xe9\xe0C1;\x1bj\xc5\x10\x11#\x9f\x18\xa5[Kk\xcd\x7fm\xb3\x06\x12a(\xf2\xd0\x01~h\xf1Q\xce\x15\xb6\x13\x9f\xb82m?\x92pl\xcfv\x10\xd9\x08a\x18\x08\x1a\xd7fK\xd6(\xda\xa3<\xdd\xe1k\xb21\x80\x92({\xb0\xebHA5\xc4K\xac2\x9d\xbcM\xa47Tw\x02\xf8\xeb\xf2n3\x8a\x92r\x8f\x00\xa9i\xaaF\xb8\x90\xfb\xcbBm\x91\x18X,\x1a6W\xf6_\x9a\xb4\xf2,x\x1bdC\x18\xfe\x97\x98`\xfa\xc1\x1b\x08Z\xe6\xba;\xa0\xff\x07\x04*\xa0p\x87\x0ft\xad\xa2\xd1\xf9\xbd\xca"\x8a\xe7\xe5\xaa\xf7\xbeI""" rsa = RSAKeyMaterial.fromRawBytes(key) self.assertEqual(rsa.exponent, 0x10001) self.assertEqual(rsa.modulus, 0xc993675acc100c64770013d976de1531336ab57857e56a8f0224823a4b6201588a75c734380c271323996a8b6531afbe8ef7fe357ccd711fdabd497e87d47ce84a46f2ed5ce3d0743cd3549246e915728385a4a0cad02509d1fea44e06fcc5e9e043313b1b6ac51011239f18a55b4b6bcd7f6db306126128f2d0017e68f151ce15b6139fb8326d3f92706ccf7610d9086118081ad7664bd628daa33cdde16bb2318092287bb0eb484135c44bac329dbc4da437547702f8ebf26e338a92728f00a969aa46b890fbcb426d9118582c1a3657f65f9ab4f22c781b644318fe979860fac11b085ae6ba3ba0ff07042aa070870f74ada2d1f9bdca228ae7e5aaf7be49) self.assertEqual(rsa.prime1, 0) self.assertEqual(rsa.prime2, 0) def test_key05(self): key = b"""RSA1\x00\x08\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\xb0\x94\xa2\x83.\xa0>\xa7\xfa\x17\xef\xad\xca\x95\xe9D\xf2P\t87\xfdV2\x05M%\xe1\'{\xfaf\xffB\x13\xc6\x87\x84\x82\x10\xd7D\xed\xfc6\xc1\xfak\x9eV\x1f\xf8\xe9&x\xc6\x04/1@\\\xc1\xc5\xba\xbe\x00\x11\x04\x9c\xbd\x91\x91\xe4\x19o\xd1n\xbbE*\xfa\x90\xb2\xc4\x1ctTCe-\xca%\xdd\xe3;\xfeQ5\\\x11>\xba=\xbc\x01\x1a\x97;&b \x05\x11\xa50L\xfd\xec\xbe\xb7\xac\xb0I\xee\r\x9e\xca\xf3\xbf\xaa\x7f\x08\xd4}8\x17\xd7Gm\xec\xb4\'\xe3\x04\xe3(b)6\'\x91&8=\xfcT\xb6o\xd0\xd9d\x86\xf8y\\\x11\xc2\x8a\xc1\xc9\xd5\xdee\xcf\x87wzq&~\xbb\xcf\xc76\xbc\x95\xdf\x18mPl\xd6\x9d9\xe4\xff\xf0\xf7\xe4\xef\x11\x1d\xcdF_}TG\x06\x02G_he\xa4\\\xa9_\xfa\xee7Lr=%"\x94\xda\xc5`TL{\xa9\xeb\x9c\xfc\xb8\xb3=\xa7\x9549\x96\x95m)\x80&\x8d1\xae\xac\xbf\xb9""" rsa = RSAKeyMaterial.fromRawBytes(key) self.assertEqual(rsa.exponent, 0x10001) self.assertEqual(rsa.modulus, 0xb094a2832ea03ea7fa17efadca95e944f250093837fd5632054d25e1277bfa66ff4213c687848210d744edfc36c1fa6b9e561ff8e92678c6042f31405cc1c5babe0011049cbd9191e4196fd16ebb452afa90b2c41c745443652dca25dde33bfe51355c113eba3dbc011a973b2662200511a5304cfdecbeb7acb049ee0d9ecaf3bfaa7f08d47d3817d7476decb427e304e328622936279126383dfc54b66fd0d96486f8795c11c28ac1c9d5de65cf87777a71267ebbcfc736bc95df186d506cd69d39e4fff0f7e4ef111dcd465f7d54470602475f6865a45ca95ffaee374c723d252294dac560544c7ba9eb9cfcb8b33da795343996956d2980268d31aeacbfb9) self.assertEqual(rsa.prime1, 0) self.assertEqual(rsa.prime2, 0) def test_key06(self): key = b"""RSA1\x00\x08\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\xab\x1d\xd0\x7fQ\xf7\\xss\x18\xa8@+n'\\\xe1\x12\xaa\xf3\x96L\xbc\xee\x16\x06\x08\x18;\xd3\x99\xca\xfe=\xce\x1c\xf3\xa2\xe6\r\x1b\x8c\xfb\xdbp\xff\xd3\xd2\x9c\x0fo\xfa\xa5C\xdbJZ\xf7Q\x82S2\x00\xf46\xe6Q\xb4\x7f\xc1\xfb\x00\xc9{\xa13u\x16\xd2\x14\xde\x97D\x11\xcdn\xc7\xa0\xf0O\x88Z\xd51\x80\xc3\xa4\x03\x9d\xd3Z\ro\xda\xbf\x03\xd2\x94\x03\x9dB\xf8\xb7\x88Fz\x1f\xe2\xd8\r\x85v\xa5\x99\xf1\xf2}\x1c,\xa1\xce\x1e,=(\n\xee?\xd4\x9d\xb9O\xf6\x82H\xb7\x14\x0b\x91\xa8g\xdf\x02\x933\x8ett|\xa1370\x9f\x0c\xa0\x19\xcf\xc4Q\xc2\x04\xd5]\x84\x84V\xa3\xc6\r\x815\x882\x1e\x0e[Z\xf2\x00\xb7\xe8\x8b\x9d\x8c\xf9\xfe3s\xa5\x9e\xd6\x04A\xc8\xb0l\xaa\r\xc3\x9b\x1d/\x8e.\xef \xa6\xf7\x9f\xd5\x16\x80!\xaaa\x1b\xea\x077\xfda\xd83\xdb\x92\xec\r\x037\xfa\xc0\xa6\x88S\x1cZX\x8d^K\xefK\xdf\xbd""" rsa = RSAKeyMaterial.fromRawBytes(key) self.assertEqual(rsa.exponent, 0x10001) self.assertEqual(rsa.modulus, 0xab1dd07f51f75c78737318a8402b6e275ce112aaf3964cbcee160608183bd399cafe3dce1cf3a2e60d1b8cfbdb70ffd3d29c0f6ffaa543db4a5af75182533200f436e651b47fc1fb00c97ba1337516d214de974411cd6ec7a0f04f885ad53180c3a4039dd35a0d6fdabf03d294039d42f8b788467a1fe2d80d8576a599f1f27d1c2ca1ce1e2c3d280aee3fd49db94ff68248b7140b91a867df0293338e74747ca13337309f0ca019cfc451c204d55d848456a3c60d813588321e0e5b5af200b7e88b9d8cf9fe3373a59ed60441c8b06caa0dc39b1d2f8e2eef20a6f79fd5168021aa611bea0737fd61d833db92ec0d0337fac0a688531c5a588d5e4bef4bdfbd) self.assertEqual(rsa.prime1, 0) self.assertEqual(rsa.prime2, 0) def test_key07(self): key = b"""RSA1\x00\x08\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\xbc\x880\xba\xb8\xe0\x9b\xf8\x12en\x00\xfa~\xebM\x83\xcfq\x0e\xb0r\xc4\xf1\x9fT\x057\xcdQug S{\xfd\x15r8\xe9%g\xb6\x8dh\xadT\x87X2O\xba\x1f\xde\xe0\xaa\x08\xd3\xed\x99c\xd0>\xf9\xbbK\xb8\xcb\x91X\xd7\xaav\x7fk\xcfR\x91+\xdd\x7f\xa5\xc4\xd3\xed\xba\xb4\x81\x88]\xc9\xf0\xf4l\x1a\xf7\x95T\x12\x8c\x108i\xda\xfa\x08G"\x9fYT:/\x8a\xea\xf58\xf3\x0cV4\xc1\xb6\xc8\x7f\x9f\x8c\xcd.y$\x15\x03\xc7uM#\xe6m\xa6\xba\xf9|\xbd;\xd4\xb7\x96M_\xb7\xea\xfe\xa7\x0b\x8b\xb1\xaf\x9d\xb7s\x19\xf6\xf9\xcf\x0e\xeb\xe1j\xf8x\xa1\x03\x8b\xf7\\\xbcs\xb2\xe2\rJ\x9fH\xd6B6\x92\x1d\x99y$\xddY\xe8\x95\x1f\x9fk:\x81<\xefx\xd8\xd3\x86\xcd\x9f\xe1pN\nD\xf8\x8f^\x90&\\\x07\xf0s1C\xe1s\xcb\xd4\x16^\x89\x0f;\x8a\xc53\xbf\n\x8b\xeb\xe6e`\xbd\xb9\x96\xc4\x08G*3\xc9\xe2\xf8q""" rsa = RSAKeyMaterial.fromRawBytes(key) self.assertEqual(rsa.exponent, 0x10001) self.assertEqual(rsa.modulus, 0xbc8830bab8e09bf812656e00fa7eeb4d83cf710eb072c4f19f540537cd51756720537bfd157238e92567b68d68ad548758324fba1fdee0aa08d3ed9963d03ef9bb4bb8cb9158d7aa767f6bcf52912bdd7fa5c4d3edbab481885dc9f0f46c1af79554128c103869dafa0847229f59543a2f8aeaf538f30c5634c1b6c87f9f8ccd2e79241503c7754d23e66da6baf97cbd3bd4b7964d5fb7eafea70b8bb1af9db77319f6f9cf0eebe16af878a1038bf75cbc73b2e20d4a9f48d64236921d997924dd59e8951f9f6b3a813cef78d8d386cd9fe1704e0a44f88f5e90265c07f0733143e173cbd4165e890f3b8ac533bf0a8bebe66560bdb996c408472a33c9e2f871) self.assertEqual(rsa.prime1, 0) self.assertEqual(rsa.prime2, 0) def test_import_export_involution(self): rsa1 = RSAKeyMaterial( 0xbc8830bab8e09bf812656e00fa7eeb4d83cf710eb072c4f19f540537cd51756720537bfd157238e92567b68d68ad548758324fba1fdee0aa08d3ed9963d03ef9bb4bb8cb9158d7aa767f6bcf52912bdd7fa5c4d3edbab481885dc9f0f46c1af79554128c103869dafa0847229f59543a2f8aeaf538f30c5634c1b6c87f9f8ccd2e79241503c7754d23e66da6baf97cbd3bd4b7964d5fb7eafea70b8bb1af9db77319f6f9cf0eebe16af878a1038bf75cbc73b2e20d4a9f48d64236921d997924dd59e8951f9f6b3a813cef78d8d386cd9fe1704e0a44f88f5e90265c07f0733143e173cbd4165e890f3b8ac533bf0a8bebe66560bdb996c408472a33c9e2f871, 0x10001, 0, 0 ) rsa2 = RSAKeyMaterial.fromRawBytes(rsa1.toRawBytes()) self.assertEqual(rsa2.exponent, 0x10001) self.assertEqual(rsa2.modulus, 0xbc8830bab8e09bf812656e00fa7eeb4d83cf710eb072c4f19f540537cd51756720537bfd157238e92567b68d68ad548758324fba1fdee0aa08d3ed9963d03ef9bb4bb8cb9158d7aa767f6bcf52912bdd7fa5c4d3edbab481885dc9f0f46c1af79554128c103869dafa0847229f59543a2f8aeaf538f30c5634c1b6c87f9f8ccd2e79241503c7754d23e66da6baf97cbd3bd4b7964d5fb7eafea70b8bb1af9db77319f6f9cf0eebe16af878a1038bf75cbc73b2e20d4a9f48d64236921d997924dd59e8951f9f6b3a813cef78d8d386cd9fe1704e0a44f88f5e90265c07f0733143e173cbd4165e890f3b8ac533bf0a8bebe66560bdb996c408472a33c9e2f871) self.assertEqual(rsa2.prime1, 0) self.assertEqual(rsa2.prime2, 0) if __name__ == '__main__': unittest.main()